詳解C#代碼生成器實(shí)現(xiàn)原理
1、目的
分別用代碼、模板生成目標(biāo)代碼文件。
方法主要包括文件讀寫、代碼生成函數(shù)、及應(yīng)用程序。
2、文件讀寫函數(shù)
/// <summary> /// 文本文件寫 /// </summary> /// <param name="path"></param> /// <param name="str"></param> public static void WriteTxt(string path, string str) { using (StreamWriter writer = new StreamWriter(path, true)) { writer.WriteLine(str); writer.Close(); } } /// <summary> /// 文本文件讀 /// </summary> /// <param name="path"></param> /// <returns></returns> public static string ReadTxt(string path) { try { if (!File.Exists(path)) { return null; } string str = string.Empty; using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read)) { using (StreamReader sr = new StreamReader(fs)) { str=sr.ReadToEnd(); sr.Close(); } fs.Close(); } return str; } catch (Exception e) { Console.WriteLine(e.Message); return null; } }
3、代碼生成函數(shù)
/// <summary> /// 代碼生成器(整體生成) /// </summary> /// <param name="space"></param> /// <param name="name"></param> public static void CsharpGenerate(string space,string name) { StringBuilder sb = new StringBuilder(); sb.Append("using System;\n" + $"namespace {space}\n" + "{\n" + $" public class {name}" + " {\n" + " private string name;\n" + " public void function(string str)\n" + " {\n" + " Console.WriteLine(str);\n" + " }\n" + " }\n"+ "}\n"); WriteTxt("E:\\generate.cs", sb.ToString()); } /// <summary> /// 代碼生成器(分行生成) /// </summary> /// <param name="space"></param> /// <param name="name"></param> public static void CsharpGenerateSplit(string space, string name) { StringBuilder sb = new StringBuilder(); sb.Append("using System;\n"); sb.Append($"namespace {space}\n"); sb.Append("{\n"); sb.Append($" public class {name}"); sb.Append(" {\n"); sb.Append(" private string name;\n"); sb.Append(" public void function(string str)\n"); sb.Append(" {\n"); sb.Append(" Console.WriteLine(str);\n"); sb.Append(" }\n"); sb.Append(" }\n"); sb.Append("}\n"); WriteTxt("E:\\generateSplit.cs", sb.ToString()); } /// <summary> /// 代碼生成器(模板生成) /// </summary> /// <param name="space"></param> /// <param name="name"></param> public static void CsharpGenerateTemplate(string space, string name) { string str = ReadTxt("E:\\generate.cs"); str = str.Replace("Demo", space); str = str.Replace("Test", name); WriteTxt("E:\\generateTemplate.cs", str); }
4、應(yīng)用
static void Main(string[] args) { //CsharpGenerate("Demo", "Test"); //CsharpGenerateSplit("Demo", "Test"); CsharpGenerateTemplate("Nature", "Develop"); }
5、效果
generate.cs文件
using System; namespace Demo { public class Test { private string name; public void function(string str) { Console.WriteLine(str); } } }
generateSplit.cs文件
using System; namespace Demo { public class Test { private string name; public void function(string str) { Console.WriteLine(str); } } }
generateTemplate.cs文件
using System; namespace Nature { public class Develop { private string name; public void function(string str) { Console.WriteLine(str); } } }
到此這篇關(guān)于詳解C#代碼生成器實(shí)現(xiàn)原理的文章就介紹到這了,更多相關(guān)C#代碼生成器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#實(shí)現(xiàn)數(shù)據(jù)包加密與解密實(shí)例詳解
這篇文章主要介紹了C#實(shí)現(xiàn)數(shù)據(jù)包加密與解密的方法,是一項(xiàng)很實(shí)用的技能,需要的朋友可以參考下2014-07-07C#結(jié)合OpenCVSharp4使用直方圖算法實(shí)現(xiàn)圖片相似度比較
這篇文章主要為大家詳細(xì)介紹了C#如何結(jié)合OpenCVSharp4使用直方圖算法實(shí)現(xiàn)圖片相似度比較,文中的示例代碼簡(jiǎn)潔易懂,需要的小伙伴可以參考下2023-09-09Revit API取得變量的內(nèi)參名稱實(shí)例代碼
這篇文章介紹了Revit API取得變量的內(nèi)參名稱實(shí)例代碼,有需要的朋友可以參考一下2013-11-11C#使用Http Post方式傳遞Json數(shù)據(jù)字符串調(diào)用Web Service
這篇文章主要為大家詳細(xì)介紹了C#使用Http Post方式傳遞Json數(shù)據(jù)字符串調(diào)用Web Service,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08Winform消除button按下出現(xiàn)的虛線簡(jiǎn)單實(shí)現(xiàn)方法
這篇文章主要介紹了Winform消除button按下出現(xiàn)的虛線簡(jiǎn)單實(shí)現(xiàn)方法,通過重寫button設(shè)置Selectable參數(shù)實(shí)現(xiàn)該功能,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08C# out關(guān)鍵詞的應(yīng)用實(shí)例
下面小編就為大家分享一篇C# out關(guān)鍵詞的應(yīng)用實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2017-12-12