SoFunction
Updated on 2025-03-03

Detailed explanation of the implementation principle of C# code generator

1. Purpose

Use code and templates to generate object code files respectively.

Methods mainly include file reading and writing, code generation functions, and application programs.

2. File reading and writing functions

/// <summary>
        /// Write text file        /// </summary>
        /// <param name="path"></param>
        /// <param name="str"></param>
        public static void WriteTxt(string path, string str)
        {
            using (StreamWriter writer = new StreamWriter(path, true))
            {
                (str);
                ();
            }
        }
        /// <summary>
        /// Read text file        /// </summary>
        /// <param name="path"></param>
        /// <returns></returns>
        public static string ReadTxt(string path)
        {
            try
            {
                if (!(path))
                {
                    return null;
                }
                string str = ;
                using (FileStream fs = new FileStream(path, , ))
                {
                    using (StreamReader sr = new StreamReader(fs))
                    {
                        str=();
                        ();
                    }
                    ();
                }
                return str;
            }
            catch (Exception e)
            {
                ();
                return null;
            }
        }

3. Code generation function

/// <summary>
        /// Code generator (total generation)        /// </summary>
        /// <param name="space"></param>
        /// <param name="name"></param>
        public static void CsharpGenerate(string space,string name)
        {
            StringBuilder sb = new StringBuilder();
            ("using System;\n" +
                $"namespace {space}\n" +
                "{\n" +
                $"  public class {name}" +
                "  {\n" +
                "    private string name;\n" +
                "    public void function(string str)\n" +
                "    {\n" +
                "      (str);\n" +
                "    }\n" +
                "  }\n"+
                "}\n");
            WriteTxt("E:\\", ());
        }
        /// <summary>
        /// Code generator (branch generation)        /// </summary>
        /// <param name="space"></param>
        /// <param name="name"></param>
        public static void CsharpGenerateSplit(string space, string name)
        {
            StringBuilder sb = new StringBuilder();
            ("using System;\n");
            ($"namespace {space}\n");
            ("{\n");
            ($"  public class {name}");
            ("  {\n");
            ("    private string name;\n");
            ("    public void function(string str)\n");
            ("    {\n");
            ("      (str);\n");
            ("    }\n");
            ("  }\n");
            ("}\n");
            WriteTxt("E:\\", ());
        }
        /// <summary>
        /// Code generator (template generation)        /// </summary>
        /// <param name="space"></param>
        /// <param name="name"></param>
        public static void CsharpGenerateTemplate(string space, string name)
        {
            string str = ReadTxt("E:\\");
            str = ("Demo", space);
            str = ("Test", name);
            WriteTxt("E:\\", str);
        }

4. Application

static void Main(string[] args)
        {
            //CsharpGenerate("Demo", "Test");
            //CsharpGenerateSplit("Demo", "Test");
            CsharpGenerateTemplate("Nature", "Develop");
        }

5. Effect

document

using System;
namespace Demo
{
  public class Test  {
    private string name;
    public void function(string str)
    {
      (str);
    }
  }
}

document

using System;
namespace Demo
{
  public class Test  {
    private string name;
    public void function(string str)
    {
      (str);
    }
  }
}

document

using System;
namespace Nature
{
  public class Develop  {
    private string name;
    public void function(string str)
    {
      (str);
    }
  }
}

This is the end of this article about explaining the implementation principles of C# code generators in detail. For more related C# code generator content, please search for my previous articles or continue browsing the related articles below. I hope everyone will support me in the future!