深入浅出.NET代码生成系列(1):概述
来源:互联网 发布:sql语句时间比较 编辑:程序博客网 时间:2024/05/01 18:32
Visual Studio之所以强大,就因为它能为开发者尽可能地生成一些代码,免去了我们经常性去做一些无意义的,机械化的操作,从而使开发者不必把时间和精力都花在细枝末节上,能更专心于程序的核心部分,开发效率也大大提高。
说到这代码生成,实话说,在日常的开发任务中,似乎使用的频率不高,而且,动态编译也有一个消耗性能的过程。
那么,我们需要对代码生成有点了解吗?应该说是有这个需要的,说不定哪一天会用得上。有时候,我会发现VS的代码生成功能未必能满足我的需求,这时候,我也会考虑自己写一个代码生成工具。
.NET的类库也提供了支持,虽然不能说所有代码都可以生成,至少常用的大部分代码是没有问题的。
代码生成难学习吗?哈,有点吧,但不能说得上很难,重要的是,语言基础要过得关,你懂得如何写代码,才能知道怎么生成代码。
先不进行任何介绍,我们先来看一个例子,直观地认识一下如何生成代码。
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.CodeDom;using System.CodeDom.Compiler;namespace ConsoleApplication1{ class Program { static void Main(string[] args) { // 声明一个命名空间 CodeNamespace MyNameSpace = new CodeNamespace("MyApp"); // 引用其它命名空间 MyNameSpace.Imports.AddRange(new CodeNamespaceImport[] { new CodeNamespaceImport("System"), new CodeNamespaceImport("System.Collections"), new CodeNamespaceImport("System.Data"), new CodeNamespaceImport("System.Text") }); // 声明一个类 CodeTypeDeclaration MyClass = new CodeTypeDeclaration("MyTestClass"); // 定义Main入口点方法 CodeEntryPointMethod MyEntryPoint = new CodeEntryPointMethod(); // Main方法应为public static MyEntryPoint.Attributes = MemberAttributes.Public | MemberAttributes.Static; // Main方法返回类型为void MyEntryPoint.ReturnType = new CodeTypeReference(typeof(void)); // Main方法中的代码 MyEntryPoint.Statements.Add(new CodeMethodInvokeExpression( new CodeMethodReferenceExpression(new CodeTypeReferenceExpression(typeof(Console)), "WriteLine"), new CodePrimitiveExpression("Hello,我的应用程序。"))); // 将方法添加到类中 MyClass.Members.Add(MyEntryPoint); // 将类添加到命名空间 MyNameSpace.Types.Add(MyClass); // 创建代码单元 CodeCompileUnit MyUnit = new CodeCompileUnit(); // 将命名空间添加到代码单元中 MyUnit.Namespaces.Add(MyNameSpace); // 创建代码生成类-C# CodeDomProvider ProviderCS = CodeDomProvider.CreateProvider("C#"); // 生成代码 ProviderCS.GenerateCodeFromCompileUnit(MyUnit, Console.Out, new CodeGeneratorOptions { BracingStyle = "C" }); // 生成VB.NET代码 CodeDomProvider ProviderVB = CodeDomProvider.CreateProvider("vb"); ProviderVB.GenerateCodeFromCompileUnit(MyUnit, Console.Out, new CodeGeneratorOptions()); Console.ReadKey(); } }}
把这个程序运行一下,我们看到两段代码,第一段是C#代码,第二段是VB.NET代码。
大家可能看上面的代码,有点云里雾里,不过别急,这个例子只是让各位对代码生成有个整体认识罢了,在后面的文章中,我会尽可能地对每一个知识点进行说明,并且每个要点都会有很简单的示例辅助理解。
- 深入浅出.NET代码生成系列(1):概述
- 深入浅出.NET代码生成系列(2):一些基本类
- 深入浅出.NET代码生成系列(3):命名空间
- 深入浅出.NET代码生成系列(4):定义类型
- 深入浅出.NET代码生成系列(5):表达式
- 深入浅出.NET代码生成系列(6):语句
- 深入浅出.NET代码生成系列(7):动态生成代码与编译综合示例
- ASP.NET AJAX入门系列(1):概述
- ASP.NET AJAX入门系列(1):概述
- ASP.NET AJAX入门系列(1):概述
- ASP.NET AJAX入门系列(1):概述
- ASP.NET AJAX入门系列(1):概述
- ASP.NET AJAX入门系列(1):概述
- ASP.NET AJAX入门系列(1):概述
- ASP.NET AJAX入门系列(1):概述
- ASP.NET AJAX入门系列(1):概述
- ASP.NET AJAX入门系列(1):概述
- re: ASP.NET AJAX入门系列(1):概述
- struts1.1在jdk1.5编译下,form传值1位字符传不过去,要两位以上才行
- oracle connect by
- windows 2003 server 设置远程连接数量问题
- 一代音频传奇Winamp如何自毁长城
- 在EAS中使用代码发送消息
- 深入浅出.NET代码生成系列(1):概述
- osgFX - 开发者简明手册
- 线上hadoop集群重启jobtracker
- TCPMP源码编译与在WINCE上的应用
- Json - 使用json-lib完成javabean对象转换成json字符串
- jquery 表头排序(jquery.tablesorter.js支持中文)
- 使用JSON的方法
- nasm与c混合编程
- linux模块基础知识