当前位置: 代码网 > it编程>编程语言>Asp.net > 详解C#代码生成器实现原理

详解C#代码生成器实现原理

2024年11月06日 Asp.net 我要评论
1、目的分别用代码、模板生成目标代码文件。方法主要包括文件读写、代码生成函数、及应用程序。2、文件读写函数/// <summary> /// 文本文件写 ///

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#代码生成器内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com