首页 > 编程开发 > Objective-C编程 >
-
c#3.0是什么及其适全范围
第一回
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就是通过写大量代码为目的而生的。
C# 3.0的适用范围
本文一开始就提到了重要的一点。
C# 3.0以及作为其开发环境的Visual Studio 2008的适用范围有多大呢。就是问,在什么Framework上开发才能用它呢?
经常被误解的,是存在这样的认识,就是这些是.NET Framework 3.5专用的,在使用.NET Framework 2.0开发时仍然必须使用Visual Studio 2005和C# 2.0。
其实,这个认识是有误解的(笔者最初也误解)。.NET Framework 3.5 其实就是.NET Framework2.0+alpha,如果不使用“+alpha”的部分,Visual Studio 2008和C# 3.0开发的程序也能够在.NET Framework 2.0上运行。
光说不练不行。让我们看看怎么做吧。Visual Studio 2008中打开工程的属性,打开应用程序标签页,Framework的版本是有2.0、3.0、3.5可选的。
这里,如果选.NET Framework 2.0,那么用VS2008+C# 3.0就能开发.NET Framework 2.0的应用程序。实际上,笔者现在写的程序,确实能够满足这样的条件。
但是,有点要注意。如果这样做,那么有的机能能够使用,有的就不能。Lambda表达式之类的语法上的新机能能够使用,需要类库支持的LINQ这类的新机能就不能用。一句话,就是不能使用所有的C# 3.0的所有机能。但是,仅是能够使用的机能,对我们的帮助就很大。如果没什么大问题,.NET Framework 2.0的项目向VS2008+C# 3.0转移是个不错的选择。
顺便提一句,VS2008比VS2005更吃系统资源。如果系统资源紧张,还是别勉强转VS2008了。机器强大的话,转VS2008+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的配合,输入量大大减少(对于精力充沛的年轻人来说这可能不算什么)。实现同样的意图,输入量的减少就意味着产量的增加。
然而更好的一点就是,读代码的时间减少了。一屏显示的文字数量和人眼能够读取的信息量都是有限的,同样的编程意图,用相对少的文字来表现的话,那么能够表示的信息量就多了。由于这一点,读代码时的翻页频度降低了,也排除了没有什么重要意义的关键字,用来分辨有意义代码的的时间也减少了。
问题是,为了没有歧义(暧昧),用更少的文字来表现同样的编程意图,而引入了新的语法,这就必须把这些个语法给记住。同时,虽然代码短了,但因为是不熟悉的语法,阅读源代码并不见得变得简单。