如何用C#动态生成代码
来源:互联网 发布:网络推广部门组建方案 编辑:程序博客网 时间:2024/04/30 03:08
陈希章
原文地址:http://www.cnblogs.com/chenxizhang/archive/2008/07/09/1238572.html原文标题:如何用C#动态生成代码
原文发表:2008/7/8 22:09:00
经常被朋友问到如何动态生成代码。这个功能是由.NET Framework内置支持的。下面这个方法就是一个简单的例子
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))));
//生成代码
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://blog.csdn.net/chen_xizhang
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
- 如何用C#动态生成代码
- 如何用C#动态生成代码
- 如何用C#动态编译、执行代码
- 如何用C#动态编译、执行代码
- 如何用C#动态编译、执行代码
- 如何用C#动态编译、执行代码
- 如何用C#动态编译、执行代码
- 如何用C#动态编译、执行代码
- 如何用C#动态编译、执行代码
- 如何用C#动态编译、执行代码
- 如何用C#动态编译、执行代码
- 如何用C#动态编译、执行代码
- 如何用C#动态编译应用程序来执行自定义代码
- 如何用动态网页生成静态网页
- 如何用Asp动态生成xml文件
- 如何用动态网页生成静态网页?
- 如何用动态网页生成静态网页
- 如何用宏生成动态二维数组
- TechNet Virtual Labs: Business Intelligence
- PerformancePoint Server 2007
- 数据分页技术
- 在windows Forms程序里面实现文件上传
- DataGridView控件中显示图片及其注意事项
- 如何用C#动态生成代码
- 如何在报表中直接使用数据库中存储的图片
- 你真的懂javascript吗
- 为文件夹启用审核
- 批量上传报表的工具
- Drawing Anti-Aliased Text and Graphics:绘制反锯齿文字和图形
- 在VS2008中使用WSE 3.0
- 正则表达式编译
- 文件拖放操作