zoukankan      html  css  js  c++  java
  • 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);
                }
    
            }
        }
    }
  • 相关阅读:
    iOS 性能调优
    Google Nexus 5x Android 7.0 Root
    Android库的标准化(不断更新中)
    Firefox实用插件记录
    关于WordPress搬家方法步骤的整理
    eclipse搭建servlet项目
    Eclipse的FindBugs插件
    常用 Java 静态代码分析工具的分析与比较
    JSONObject简介
    New XAMPP security concept:错误解决方法
  • 原文地址:https://www.cnblogs.com/kinpauln/p/2549379.html
Copyright © 2011-2022 走看看