1、目的
分别用代码、模板生成目标代码文件。
方法主要包括文件读写、代码生成函数、及应用程序。
2、文件读写函数
/// <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、代码生成函数
/// <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、应用
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); } } }
到此这篇关于详解c#代码生成器实现原理的文章就介绍到这了,更多相关c#代码生成器内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论