详解C#代码生成器实现原理
GPT4.0+Midjourney绘画+国内大模型 会员永久免费使用!
【 如果你想靠AI翻身,你先需要一个靠谱的工具! 】
1、目的
分别用代码、模板生成目标代码文件。
方法主要包括文件读写、代码生成函数、及应用程序。
2、文件读写函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | /// <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、代码生成函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | /// <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、应用
1 2 3 4 5 6 | static void Main( string [] args) { //CsharpGenerate("Demo", "Test"); //CsharpGenerateSplit("Demo", "Test"); CsharpGenerateTemplate( "Nature" , "Develop" ); } |
5、效果
generate.cs文件
1 2 3 4 5 6 7 8 9 10 11 | using System; namespace Demo { public class Test { private string name; public void function( string str) { Console.WriteLine(str); } } } |
generateSplit.cs文件
1 2 3 4 5 6 7 8 9 10 11 | using System; namespace Demo { public class Test { private string name; public void function( string str) { Console.WriteLine(str); } } } |
generateTemplate.cs文件
1 2 3 4 5 6 7 8 9 10 11 | using System; namespace Nature { public class Develop { private string name; public void function( string str) { Console.WriteLine(str); } } } |
到此这篇关于详解C#代码生成器实现原理的文章就介绍到这了,更多相关C#代码生成器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
微信公众号搜索 “ 脚本之家 ” ,选择关注
程序猿的那些事、送书等活动等着你
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 reterry123@163.com 进行投诉反馈,一经查实,立即处理!
相关文章
c# 实现MD5,SHA1,SHA256,SHA512等常用加密算法源代码
c# 如何实现MD5,SHA1,SHA256,SHA512等常用加密算法,需要的朋友可以参考下2012-12-12C# 使用 Castle 实现 AOP及如何用 Autofac 集成 Castle
这篇文章主要介绍了C# 使用 Castle 实现 AOP及如何用 Autofac 集成 Castle,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下2021-02-02在C#中List集合使用First()方法获取第一个元素的操作
这篇文章主要介绍了在C#中List集合使用First()方法获取第一个元素的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2020-12-12C#中IsNullOrEmpty和IsNullOrWhiteSpace的使用方法及区别解析
今天我们将探讨C#中两个常用的字符串处理方法:IsNullOrEmpty和IsNullOrWhiteSpace,本文中,我们将详细解释这两个方法的功能和使用场景,并帮助您更好地理解它们之间的区别,本文结合实例代码给大家介绍的非常详细,需要的朋友参考下吧2023-07-07
最新评论