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