C# 動態生成類 枚舉等

private void GenerateCode() {html

/*注意,先導入下面的命名空間ide

using System.CodeDomspa

using System.CodeDom.Compiler;htm

using Microsoft.CSharp;blog

using System.Reflection;事件

*/ ip

//準備一個代碼編譯器單元ci

CodeCompileUnit unit = new CodeCompileUnit();get

//準備必要的命名空間(這個是指要生成的類的空間)編譯器

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  有改動

相關文章
相關標籤/搜索