[C# 3.0入门] [第一章 Lambda表达式]第一节:C# 3.0是什么&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就是通过写大量代码为目的而生的。

时间: 2024-07-28 20:20:29

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

[C# 3.0 入门] [第一章 Lambda表达式] 第二节:Lambda表达式带来了什么

本次的内容,主要是针对已经学习过C# 2.0的程序员读者的,前提是已经知道什么是匿名方法.如果还不清楚,请先阅读"连载:C# 2.0入门"(这篇会在今后翻译). 好的,现在进入正题. Lambda表达式(λ表达式),用一句话来解释,(不算很严谨)就是使匿名方法文字上更短的语法.虽然这样说,单"仅仅是文字上的变化,源代码的性质没有变"这样的想法也是一种误解.规模变化了,其性质也会变化.例如,实验室的烧杯中产生的现象,不一定会在大型的工厂里产生.同样的道理也适用于源代码

[C# 3.0 入门] [第一章 Lambda表达式] 第五节

[C# 3.0 入门] [第一章 Lambda表达式] 第五节:Lambda表达式的使用范例 & Lambda表达式的各种变体 Lambda表达式的使用范例 到现在为止的例子大多数,完全都是从文法上到功能上的说明,多数情况下不必使用Lambda表达式也能够写出来.最后,我还是来展示几个有一定实用性的Lambda表达式的实例. 这里是一个,输入整形的数组,以其值为除数,执行除法运算后输出结果的程序.因为要执行除法运算,所以输入的值可能存在不能接受的值(0)的情况(就是说,这个示例代码可以在输入值不

[C# 3.0 入门] [第一章 Lambda表达式] 第四节

[C# 3.0 入门] [第一章 Lambda表达式] 第四节:Lambda的用途 & 类型声明能够和不能够省略的情况 成问题的是,虽然为了源代码的简洁性,很想用Lambda表达式,但是要写的代码却不能全部都用Lambda表达式来写. 那么, Lambda表达式究竟能做到什么程度呢? 习惯了C/C++编程风格的程序员,一定以为因C#语法与之很相似,所以用C#编写相对复杂的程序应该也没有问题.可是很遗憾,情况不是这样.那是因为C/C++具有能写出复杂功能的表达式的逗号表达式,而C#却没有. 例如,

[C# 3.0 入门] [第一章 Lambda表达式] 第三节:Lambda与匿名方法的区别

Lambda表达式与匿名方法的区别 那么,为什么Lambda表达式比匿名方法写起来要短呢?这种像变戏法一样的手法真的能用吗?有没有重要信息遗漏掉呢?为了回答这些问题,就让我们把匿名方法和Lambda表达式比较一下,看看Lambda表达式究竟怎么写. 1using System; 2 3delegate int SampleDelegate(int x, int y); 4 5class Program 6{ 7 private static void Calculate(int x, int y

《编译与反编译技术》——第一章 引论 1.1节编译器与解释器

人类之间的交流是通过语言进行的,但语言不是唯一的,不同的语言之间需要翻译,这就导致了翻译行业的建立.人与计算机之间也是通过语言进行交流的,但人类能理解的语言与机器能理解的语言是不同的,也需要翻译,这就导致了系列编译器的诞生.编译技术所讨论的问题,就是如何把符合人类思维方式的意愿(源程序)翻译成计算机能够理解和执行的形式(目标程序).实现从源程序到目标程序转换的程序,称为编译程序或编译器.反编译技术所讨论的问题,就是如何把计算机能够理解和执行的形式(目标程序)翻译成便于人类理解的形式(高级语言源程

《圣殿祭司的ASP.NET4.0专家技术手册》----2-11 Lambda表达式

2-11 Lambda表达式 圣殿祭司的ASP.NET4.0专家技术手册 Lambda表达式(Lambda Expressions)其功能属于Anonymous Function,但比.NET 2.0的匿名方法具备更强能力,语法更为简洁,应用的场景更为广泛. Lambda表达式主要是使用"=>"符号表示其表达式,=>符号在英文字义表示"goes to". 范例2-10 Lambda 表达式在Delegate委托上的应用 Lambda表达式可以建立Dele

C# 3.0入门系列-目录导航

1 C# 3.0 入门系列(一) 从linq开始引C# 3.0. 2 C# 3.0入门系列(二) 数据库的准备,引入Linq To Sql的准备. 3 C# 3.0入门系列(三) 第一个Linq To Sql工程. 4 C# 3.0入门系列(四)-之Select操作 Select语法. 5 C# 3.0入门系列(五)-之Where操作 Where操作语法. 6 C# 3.0入门系列(六)-之OrderBy操作 OrderBy 操作语法. 7 C# 3.0入门系列(七)--之OR工具介绍 C# 3

C# 委托,事件和Lambda表达式

关于这个论题,Delegates, Events, and Lambda Expressions 对此有比较深入的分析,可以参考.C# vs C++之一:委托 vs 函数指针 比较了委托和C++指针的区别. .NET 中的委托确实和C/C++的函数指针非常相似.它是一个值类型,它包装了一个指向方法的引用.它的作用也是为了能够将方法和变量一样作为参数传递.委托的典型应用是控件的事件处理方法.很显然,一个控件在设计的时候没有办法知道当特定事件发生的时候,需要什么方法来处理,这就需要将方法作为参数传递

一起谈.NET技术,C# 委托,事件和Lambda表达式

关于这个论题,Delegates, Events, and Lambda Expressions 对此有比较深入的分析,可以参考.C# vs C++之一:委托 vs 函数指针 比较了委托和C++指针的区别. .NET 中的委托确实和C/C++的函数指针非常相似.它是一个值类型,它包装了一个指向方法的引用.它的作用也是为了能够将方法和变量一样作为参数传递.委托的典型应用是控件的事件处理方法.很显然,一个控件在设计的时候没有办法知道当特定事件发生的时候,需要什么方法来处理,这就需要将方法作为参数传递