zoukankan      html  css  js  c++  java
  • C# 动态生成类 枚举等

    private void GenerateCode() {

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

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

    /* 生成枚举、枚举特性Description

     //生成特性
                Customerclass.CustomAttributes.Add(new CodeAttributeDeclaration(new CodeTypeReference(typeof(DescriptionAttribute)), new CodeAttributeArgument(new CodePrimitiveExpression(listItem.Description))));
                //指定这是一个Enum
                Customerclass.IsEnum = true;
                Customerclass.TypeAttributes = TypeAttributes.Public;
                //添加字段
                CodeMemberField field = new CodeMemberField(typeof(Enum), "枚举项1" + "=" + 1);
                field.Attributes = MemberAttributes.Public;
                //生成特性
                field.CustomAttributes.Add(new CodeAttributeDeclaration(new CodeTypeReference(typeof(DescriptionAttribute)), new CodeAttributeArgument(new CodePrimitiveExpression("枚举描述信息"))));
                Customerclass.Members.Add(field);

    **/

    //生成代码

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

    }

    }

    最后生成的结果是

    image

    注:本文摘自 http://www.cnblogs.com/chenxizhang/archive/2008/07/09/1238572.html  有改动

  • 相关阅读:
    git 只添加cpp文件
    URI和URL学习
    scanpy中常用函数
    特征去量纲方法
    排列组合数计算公式
    UML图
    行测图形推理笔记-
    nis服务器实现用户帐号管理同步
    rsh配置双方主机免密
    两周实习的总结
  • 原文地址:https://www.cnblogs.com/Shaina/p/4699157.html
Copyright © 2011-2022 走看看