首页
学习
活动
专区
工具
TVP
发布

大内老A

专栏成员
840
文章
860403
阅读量
118
订阅数
与VS集成的若干种代码生成解决方案[博文汇总(共8篇)]
前一阵子写了不少关于代码生成相关的文章,介绍了一些如何通过VS自动生成代码的解决方案,比如CodeDOM、T4以及ASP.NET的BuildProvider等。现在将它们作一个汇总,给广大读者作一个参考。 [第1篇] 通过CodeDOM定义生成代码的结构 我不知道大家对CodeDOM的代码生成机制是否熟悉,但是有一点可以确定:如果你使用过Visual Studio,你就应该体验过它带给我们在编程上的便利。随便列举三种典型的代码生成的场景:在创建强类型DataSet的时候,VS会自动根据Schema生成相应的
蒋金楠
2018-02-08
2.6K0
创建代码生成器可以很简单:如何通过T4模板生成代码?[上篇]
在《基于T4的代码生成方式》中,我对T4模板的组成结构、语法,以及T4引擎的工作原理进行了大体的介绍,并且编写了一个T4模板实现了如何将一个XML转变成C#代码。为了让由此需求的读者对T4有更深的了解,我们通过T4来做一些更加实际的事情——SQL Generator。在这里,我们可以通过SQL Generator为某个数据表自动生成进行插入、修改和删除的存储过程。[文中源代码从这里下载] 一、代码生成器的最终使用效果 我们首先来看看通过直接适用我们基于T4的SQL生成模板达到的效果。右图(点击看大图)是
蒋金楠
2018-02-08
3.5K0
创建代码生成器可以很简单:如何通过T4模板生成代码?[下篇]
在《上篇》中我们通过T4模板为我们指定的数据表成功生成了我们需要的用于添加、修改和删除操作的存储过程。但是这是一种基于单个文件的解决方案,即我们必须为每一个生成的存储过程建立一个模板。如果我们提供一种基于多文件的代码生成方式,将会为编程人员带来极大的便利。借助于T4 ToolBox这个开源工具箱,多文件的SQL Generator的实现变得异常简单。[文中的例子可以从这里下载] 目录 一、多文件代码生成器会带来多大的便利? 二、创建自定义的Generator 三、ProcedureGenerator
蒋金楠
2018-02-08
8870
让“链式调用(方法链)”更加自然一点
不论是JavaScript还是C#程序,我们已经习惯了采用如下所示的“链式调用”的方式进行编程,这样确实会使我们的程序变得很精练。 1: new Foo() 2: .UseXxx() 3: .UseZzz() 4: .UseZzz() 5: .Invoke(); 采用这种链式调用方式的很多方法都是扩展方法,比如上面所示的UseXxx、UseYyy和UseXxx方法就是采用如下形式定义的扩展方法。 1: public interface IF
蒋金楠
2018-02-07
7900
从yield关键字看IEnumerable和Collection的区别
C#的yield关键字由来以久,如果我没有记错的话,应该是在C# 2.0中被引入的。相信大家此关键字的用法已经了然于胸,很多人也了解yield背后的“延迟赋值”机制。但是即使你知道这个机制,你也很容易在不经意间掉入它制造的陷阱。 目录 一、一个很简单的例子 二、简单谈谈“延迟赋值” 三、从反射的代码帮助我们更加直接的了解yield导致的延迟赋值 四、如果需要“立即赋值”怎么办? 后记 一、一个很简单的例子 下面是一个很简单的例子:Vector为
蒋金楠
2018-02-07
7760
从数据到代码——基于T4的代码生成方式
在之前写一篇文章《从数据到代码》(上篇、下篇)中,我通过基于CodeDOM+Custom Tool的代码生成方式实现了将一个XML表示的消息列表转换成了相应的C#代码,从而达到了强类型编程的目的。实际上,我们最常用的代码生成当时不是CodeDOM,而是T4,这是一个更为强大,并且适用范围更广的代码生成技术。今天,我将相同的例子通过T4的方式再实现一次,希望为那些对T4不了解的读者带来一些启示。同时这篇文章将作为后续文章的引子,在此之后,我将通过两篇文章通过具体实例的形式讲述如果在项目将T4为我所用,以达到提
蒋金楠
2018-02-07
2.1K0
C# 4.0新特性-"协变"与"逆变"以及背后的编程思想
在《上篇》中我们揭示了“缺省参数”的本质,现在我们接着来谈谈C#4.0中另一个重要的新特性:协变(Covariance)与逆变(Contravariance)。对于协变与逆变,大家肯定不会感到陌生,但是我相信有很多人不能很清晰地说出他们之间的区别。我希望通过这篇文章能够让读者更加深刻的认识协变与逆变。但是也不排除另一种可能,那就是读者这篇文章你对这两个概念更加模糊。文章一些内容仅代表个人观点,如有不妥,还望指正。 目录 一、两个概念:强类型与弱类型 二、委托中的协变与逆变
蒋金楠
2018-02-07
6260
深入理解C# 3.x的新特性(5):Object Initializer 和 Collection Initializer
深入理解C# 3.x的新特性系列自开篇以后,已经有两个月了。在前面的章节中,我们先后深入讨论了C# 3.x新引入的一些列新特性:Anomynous Type、Extension Method、Lambda Expression、Automatically Implemented Property,今天我们来讨论本系列的涉及的另外两个简单的Feature: Object Initializer 和 Collection Initializer。 一、 为什么要引入Object Initializer 和 Co
蒋金楠
2018-02-07
5060
[原创]深入理解C# 3.x的新特性(3):从Delegate、Anonymous Method到Lambda Expression
在C#3.0中,引入了一些列新的特性,比如: Implicitly typed local variable, Extension method,Lambda expression, Object initializer, Anonymous type, Implicitly typed array, Query expression, Expression tree. 个人觉得在这一系列新特性的,最具创新意义的还是Extension method,它从根本上解决了这样的问题:在保持现有Type原封不动的情
蒋金楠
2018-02-07
5520
深入理解C# 3.x的新特性(2):Extension Method[下篇]
四、Extension Method的本质 通过上面一节的介绍,我们知道了在C#中如何去定义一个Extension Method:它是定义在一个Static class中的、第一个Parameter标记为this关键字的Static Method。在这一节中,我们来进一步认识Extension Method。 和C# 3.0的其他新特性相似,Extension Method仅仅是C#这种.NET Programming Language的新特性而已。我们知道,C#是一种典型的编译型的语言,我们编写的Sour
蒋金楠
2018-02-07
6730
深入理解C# 3.x的新特性(1): Anonymous Type
在C#3.0中,引入了一个新的Feature:Anonymous Method,允许我们已Inline的方式来定义Delegate,为Developer在Coding的时候带来了很大的便利。在C#3.0中,我们又有了另一个相似的Feature:Anonymous Type。Anonymous Type允许我们已Inline的方式的创建一个基于未知类型、具有所需数据结构的对象。 一、Anonymous Type Overview 在传统的编程模式中,对象依赖于一个既定的Type,我们只能在Type的基础上
蒋金楠
2018-02-07
1.2K0
深入理解C#3.x的新特性(4):Automatically Implemented Property
深入理解C#3.x的新特性系列在沉寂一个月之后,今天继续。在本系列前3部分中,我们分别讨论了Anonymous Type,Extension Method和Lambda Expression,今天我们来讨论另一个实用的、有意思的New feature:Automatically Implemented Property。 一、繁琐的private field + public property Definition 相信大家大家已经习惯通过一个private field + public property的
蒋金楠
2018-02-07
4860
谈谈C# 4.0新特性“缺省参数”的实现
C#4.0关于缺省参数的新特性,相信大家都不会陌生。所谓缺省参数,顾名思义,就是在声明方法的某个参数的时候为之指定一个默认值,在调用该方法的时候如果采用该默认值,你就无须指定该参数。和很多语言层面特性(语法糖)的实现一样,缺省参数也是编译器为我们玩的一个小花招。缺省参数最终体现为两个特殊的自定义特性OptionalAttribute和DefaultParameterValueAttribute 。 目录 一、缺省参数的用法 二、实现缺省参数的两个特性:OptionalAttrib
蒋金楠
2018-01-16
1.1K0
yield在WCF中的错误使用——99%的开发人员都有可能犯的错误[下篇]
昨天写了《yield在WCF中的错误使用——99%的开发人员都有可能犯的错误[上篇]》,引起了一些讨论。关于yield关键字这个语法糖背后的原理(C#编译器将它翻译成什么)其实挺简单,虽然有时候因为误用它会导致一些问题,但是它本无过错。接下来,我们通过这篇短文简单地谈谈我所理解的yield。 目录 一、先看一个简单的例子 二、了解本质,只需要看看yield最终编译成什么 三、回到WCF的例子 一、先看一个简单的例子 我们现在看一个简单的例子。我们在一个Consol
蒋金楠
2018-01-15
1.6K0
没有更多了
社区活动
【纪录片】中国数据库前世今生
穿越半个世纪,探寻中国数据库50年的发展历程
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档