当前位置: 首页 > article >正文

C#代码生成器实现原理

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);
    }
  }
}

http://www.kler.cn/a/380376.html

相关文章:

  • 【递归与回溯深度解析:经典题解精讲(下篇)】—— Leetcode
  • 进军AI大模型-环境配置
  • 机器学习详解(11):分类任务的模型评估标准
  • 虚拟机桥接模式
  • 2011-2020年各省城镇职工基本医疗保险年末参保人数数据
  • vxe-table 实现跨行按钮同时控制两行的编辑状态
  • w~大模型~合集19
  • 【JAVA】Java基础—Java开发环境搭建:安装JDK与IDE(如IntelliJ IDEA、Eclipse)
  • 临街矩阵乘以自己转置的含义
  • 气象大模型学习笔记
  • QT:QThread:重写run函数
  • HarmonyOS:UIAbility组件概述
  • k8s 上如何跑 Dolphins 模型
  • CentOS一次性安装 Nginx 的脚本指南
  • MySQL45讲 第十一讲 怎么给字符串字段加索引?
  • TCP建立连接之后怎么保持长连接(检测连接断没断)
  • 面试准备第一版ssm spring-springmvc
  • Swift 开发教程系列 - 第1章:Swift 简介与开发环境配置
  • Ubuntu下网络抓包工具:Wireshark与Tcpdump实例解析
  • 科技 | 谷歌 AI 生成代码争议
  • mysql到doris的DDL整库转换工具
  • Nop平台与APIJSON的功能对比
  • 国际化教育品牌的人力资源管理利器
  • CVE-2024-51567 CyberPanel upgrademysqlstatus 远程命令执行
  • JavaEE初阶-----servlet-api,Maven创建项目,部署,打包,测试全过程
  • 分类模型onnx推理,并生成混淆矩阵