摘要:习惯了C/C++编程风格的程序员,一定以为因C#语法与之很相似,所以用C#编写相对复杂的程序应该也没有问题。可是很遗憾,情况不是这样。那是因为C/C++具有能写出复杂功能的表达式的逗号表达式,而C#却没有。
但是C#有三元运算符?:和空接合运算符??。通过使用这些运算符,相当数量的代码都可以用Lambda表达式来写了。
Lambda表达式没有返回值的情况(void的情况),想使其内容为空的情况下(调用后什么也不执行的Lambda表达式选择使用的情况),可以使用内容为空的Lambda语句。
阅读全文
摘要:为什么Lambda表达式比匿名方法写起来要短呢?这种像变戏法一样的手法真的能用吗?有没有重要信息遗漏掉呢?为了回答这些问题,就让我们把匿名方法和Lambda表达式比较一下。
首先,Lambda表达式使用的“=>”,叫“=>运算符”,读作“向~输入”(日本读法,跟国情有关)。在上例中,就读作“向x、y输入x+y”(虽这样说,但如果不习惯也不必勉强这样读,笔者也不爱这样读,忒费劲)。delegate关键字并不是去掉了,如果理解为被“=>”运算符替换了的话可能更容易理解。这就是区分“匿名方法”与“Lambda表达式”的关键字。仅这一点,就从delegate的8个字母减到=>两个字母,少了6个字母呢!(这账算的,也不知是真傻还是精明过头了。对我们C#程序员来说,敲入delegate恐怕要比敲入=>快多了。鬼知道=、>这两个字符在哪个键上,每次都要低头去找,还要按Shift,麻烦!)
阅读全文
摘要:Lambda表达式(λ表达式),用一句话来解释,(不算很严谨)就是使匿名方法文字上更短的语法。虽然这样说,单“仅仅是文字上的变化,源代码的性质没有变”这样的想法也是一种误解。规模变化了,其性质也会变化。例如,实验室的烧杯中产生的现象,不一定会在大型的工厂里产生。同样的道理也适用于源代码。
那么,就体验一下Lambda表达式吧。
以下,使用具体的code来说明一下,不是实际工程中的代码,而是实际代码使用C# 2.0重写的。
......
YAGNI是“You Aren't Going to Need It.”的简写,意思是:或许是必要的功能实际上并不必要的可能性非常高。一句话,为未知的未来而事先准备的代码,基本上是没用的。这样的教训很多。
阅读全文
摘要: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 每天生产大量代码的大有人在。笔者也是其中之一。
那么为什么他们
阅读全文