較之C# 2.0, C# 3.x引入了一系列新的特性,為我們編程帶來很大的便利,通過有效地利用這些新特性,我們可以編寫出更加簡潔、優雅的程式。不過這些新特性僅僅是編譯器給我們耍的小花招:在編譯的時候加入一些必要的Code,使這些在C# 2.0角度看略顯“殘缺”的Code變得“完整”,實際上最終產生的Assembly和在C# 2.0時代並沒有本質的不同。為此,有些人對這些新特性不以為然,覺得僅僅是一些表面文章。但是我的觀點是:既然這些特效能給我們帶來便利,幹嘛不用呢?
本系列的著重點並不是放在如果去應用這些新特性上(實際上使用這些特性是很簡單的),而是更多地落在對這些特性的實現的介紹上面:編譯器到底在編譯的時候加了哪些額外的代碼來完善這些略顯“殘缺”的代碼。
[第1篇] Anonymous Type
Anonymous Type允許我們定義一個對象並初始化一組任意的屬性列表,而這個對象對應的Type並不是預先定義的。比如:
1: var v = new{ID = Guid.NewGuid(), Name= "Zhang San" };
[第2篇] Extension Method
通過Extension Method,我們可以不改變Type定義的前提下對其方法成員進行擴充:我們在另一個Type中定一個一個特性的Static 方法,使之作為這個Type的Extension Method,這樣的方法可以象其它方法一樣的方法進行調用。LINQ的Operator,比如Where,From,Order by等,都是通過這樣的進行定義的。
[第3篇] Lambda Expression
Lambda Expression被廣泛使用到LINQ中,其本質就是一個Delegate。在這部分中,我將介紹Lambda Expression是如何通過一個Delegate來實現的。
[第4篇] Automatically Impemented Property
有了Automatically Implemented Property,我們可以簡化傳統的private field + public property的屬性定義方式,就像這樣:
1: public class Vector
2: {
3: public double X { get; set; }
4: public double Y { get; set; }
5: }
[第5篇] Object Initializer & Collection Initializer
Object Initializer & Collection Initializer是我將對象的建立和初始化合二為一:通過Object Initializer使用一次調用建立一個對象和初始化其屬性成員,通過Collection Initializer在建立Collection對象的時候同時初始化該Collection的初始成員:
1: Vector v = new Vector { X = 1, Y = 2 };
2: IList<string> list = new List<string> { "Zhang San", "Li Si", "Wang Wu" };
作者:Artech
出處:http://artech.cnblogs.com/
本文著作權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文串連,否則保留追究法律責任的權利。