当前位置: 首页 > 编程语言 > C# > 正文

[C# 3.0入门] [第一章 Lambda表达式]第一节:C# 3.0是什么&C# 3.0的适用范围

时间:2010-06-13 博客园 五斗米

第一回

Lambda表达式

本节原文http://www.atmarkit.co.jp/fdotnet/csharp30/csharp30_01/csharp30_01_01.html

C# 3.0 是什么

C#也顺利的进行了版本升级,变成3.0了。在连载开始之初,就当作是前言吧,简单的介绍一下C# 3.0究竟是什么。

C# 3.0,是运行时绑定的类型安全(似乎我们称之为强类型)的面向对象(日语原文“object指向”)语言。运行时绑定(日语原文是“动的”),指的是程序运行时才能够确定,类型安全,是指所有数据都是有类型的,或编译的时候,或运行的时候,有严格的类型检查。然后,面向对象是指数据与object为基础的语言。

但是,这些调整是从C#2.0继承而来的,并不是C# 3.0所特有的。作为C# 3.0所特有的特征是什么呢?

根据笔者个人的印象,对于C# 3.0语言具有的各个机能的技术解说很多,但对于语言本身的说辞却很少。例如,经常会见到“与其他语言相比,Java(或者Ruby)是那么的优美”这样的词句。但是,关于C# 3.0的文章,大多是些个别技术内容及其使用的介绍,与其他语言相比较的文章,对语言优美性大家赞赏的文章却很少遇见。

难道是C# 3.0没人在用吗?肯定不能这么说。用C# 3.0 每天生产大量代码的大有人在。笔者也是其中之一。

那么为什么他们不说呢?恐怕不问当事人就很难知道答案。但是,笔者不说的理由却很简单。技术人员,并不是说客,而是coder,是那种代码写的很爽觉睡得很爽就很满足的人种。同时,用C# 3.0 没压力的(但是,写这样的随笔的理由也很简单。因为有一种人叫撰稿人,是说客。笔者,就是一个撰稿人,脚踏两条船)。

这种情况暗示了一下问题:

世上,存在着不通过解说的强化就体现不出其优秀性的语言,也存在着不经过写代码的检验其优秀性不能被领会的语言。

这也意味着,C# 3.0的特征,不是通过言语的说明,而必须看见实实在在的代码才能理解。而这代码也不是那种寥寥几行的sample code,必须是动真格的那种有一定规模的program(但是遗憾的是,这种篇幅的连载随笔,也写不下这样的code。只能是用那种寥寥几行的sample code来做说明,还望谅解)。

那么,具体的用code来展现的C# 3.0的特征究竟是什么呢?

我认为,那其实就是“排除了一切歧义(暧昧),使用严格的类型,用彻彻底底最少的文字来写code”。

一个典型的例子,就是这次的主题“Lambda表达式”。Lambda表达式的内部机理,与C# 2.0 所具有的匿名方法没什么两样。有两样的地方,主要就是能够以最少的文字数来写代码。

另一个c# 3.0的新机能“隐含类型变量”,同样也是为了减少代码数量。根据初始化值的来确定类型,又以前的代码:

SpecialHighReadabilityTypeName<AnotherHighReadabilityTypeName>

这么一长串变成了var三个字母(这个新机能将在后面的章节介绍)。

但是,代码变短的效果是巨大的。首先,当然是手敲键盘的时间变短了。通过Visual Studio的IntelliSense的配合,输入量大大减少(对于精力充沛的年轻人来说这可能不算什么)。实现同样的意图,输入量的减少就意味着产量的增加。

然而更好的一点就是,读代码的时间减少了。一屏显示的文字数量和人眼能够读取的信息量都是有限的,同样的编程意图,用相对少的文字来表现的话,那么能够表示的信息量就多了。由于这一点,读代码时的翻页频度降低了,也排除了没有什么重要意义的关键字,用来分辨有意义代码的的时间也减少了。

问题是,为了没有歧义(暧昧),用更少的文字来表现同样的编程意图,而引入了新的语法,这就必须把这些个语法给记住。同时,虽然代码短了,但因为是不熟悉的语法,阅读源代码并不见得变得简单。

但这也不是什么大问题。为什么呢?C# 3.0 本来就是一个用来埋头写代码的语言(我的理解是“C# 3.0不是仅仅用来读的),C# 3.0的程序员就是大量代码的制造者。在这大量的代码制造过程中,这几个个别的语法问题早就熟悉了。换句话说,C# 3.0就是通过写大量代码为目的而生的。