深入浅出.NET代码生成系列(1):概述

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爱好者的福音来啦! Dot Net代码生成器 - NET代码生成利器 - DotNet代码生成器  基于.net framework 2.0 的代码生成器,功能强大,操作灵活,可以生成任何一种代码文件。提供了数据源、模板、另存为、工具、数据扩展5种插件接口。   1、自定义模板。目前只有一个基础模板,是基于XML配置、字符串替换的,不过该模板支持动态调用代码文件进行编译,对要生成的对象进行预处理,以达到个人的目的。后期可以寻找其他更优秀的模板引擎,来提高生成效率。   目前该模板下定义了几个模板文件,比如FaibClass.data的,还有YS.ORMapper,还有生成HTML、生成SQL的。   2、数据源。一改以往代码生成器的一惯作风,只是单一的使用Sql或其他数据源,在这个工具里,可以打开PowerDesign文档,也可以打开ERWin或是Visio(尚在研究阶段)。并且提供了强好的表及字段编辑功能,主键、外键、枚举等都可以自定义。   还提供了架构同步功能。   3、工具。可以集成一些工具于CodeBuilder强大的界面管理中,可以与CodeBuilder进行协作工作,比如提供对表名字段修改、生成的工具。   4、数据扩展。分别为表及字段进行了扩展,可由个人需要实现该接口,将扩展数据附加于表或字段中,生成更丰富的代码。   5、系统托盘。显示托盘时,再次双击CodeBuilder或双击.dsc文件,都会由托盘调入正在后台运行的CodeBuilder。   6、最后在收藏夹中提供了一个IE工具栏插件,可将网页添加到CodeBuilder的收藏夹。   7、在线插件安装。可由爱好者提供插件发布,在线共享优秀插件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值