C# 自动生成类

using System.CodeDom;
using System.CodeDom.Compiler;
using Microsoft.CSharp;
using System.Reflection;

namespace Test
{
    public partial class Coder
    {
        public static void CreateClassFile()
        {

            /*注意,先导入下面的命名空间

            using System.CodeDom

            using System.CodeDom.Compiler;

            using Microsoft.CSharp;

            using System.Reflection;

            */

            //准备一个代码编译器单元
            CodeCompileUnit unit = new CodeCompileUnit();

            //准备必要的命名空间(这个是指要生成的类的空间)
            CodeNamespace sampleNamespace = new CodeNamespace("Xizhang.com");

            //导入必要的命名空间
            sampleNamespace.Imports.Add(new CodeNamespaceImport("System"));

            //准备要生成的类的定义
            CodeTypeDeclaration Customerclass = new CodeTypeDeclaration("Customer");

            //指定这是一个Class
            Customerclass.IsClass = true;

            Customerclass.TypeAttributes = TypeAttributes.Public | TypeAttributes.Sealed;

            //把这个类放在这个命名空间下
            sampleNamespace.Types.Add(Customerclass);

            //把该命名空间加入到编译器单元的命名空间集合中
            unit.Namespaces.Add(sampleNamespace);

            //这是输出文件
            string outputFile = "Customer.cs";

            //添加字段
            CodeMemberField field = new CodeMemberField(typeof(System.String), "_Id");
            field.Attributes = MemberAttributes.Private;
            Customerclass.Members.Add(field);

            //添加属性
            CodeMemberProperty property = new CodeMemberProperty();
            property.Attributes = MemberAttributes.Public | MemberAttributes.Final;
            property.Name = "Id";
            property.HasGet = true;
            property.HasSet = true;
            property.Type = new CodeTypeReference(typeof(System.String));
            property.Comments.Add(new CodeCommentStatement("这是Id属性"));
            property.GetStatements.Add(new CodeMethodReturnStatement(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), "_Id")));
            property.SetStatements.Add(new CodeAssignStatement(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), "_Id"), new CodePropertySetValueReferenceExpression()));
            Customerclass.Members.Add(property);

            //添加方法(使用CodeMemberMethod)--此处略
            //添加构造器(使用CodeConstructor) --此处略
            //添加程序入口点(使用CodeEntryPointMethod) --此处略
            //添加事件(使用CodeMemberEvent) --此处略
            //添加特征(使用 CodeAttributeDeclaration)

            Customerclass.CustomAttributes.Add(new CodeAttributeDeclaration(new CodeTypeReference(typeof(SerializableAttribute))));

            //生成代码
            CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp");
            CodeGeneratorOptions options = new CodeGeneratorOptions();
            options.BracingStyle = "C";
            options.BlankLinesBetweenMembers = true;

            using (System.IO.StreamWriter sw = new System.IO.StreamWriter(outputFile))
            {
                provider.GenerateCodeFromCompileUnit(unit, sw, options);
            }

        }
    }
}
原文地址:https://www.cnblogs.com/kinpauln/p/2549379.html