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);
}
}
最後生成的結果是
注:本文摘自 http://www.cnblogs.com/chenxizhang/archive/2008/07/09/1238572.html 有改動