小小總結一下一些經常會用到的C# 4.0的語言特性,順序很隨意。
1. Interface
Interface並不是C#特有的東西,面向對象語言都有接口這個東西。但是在C#中,接口的地位其實是要比Abstract Class重要的。這尤其表現在單元測試使用Mock的時候。由於在C#語言中,只有顯性標識virtual的方法才可以被Override,所以當我們需要在測試中進行動態Mock的時候,就需要我們被Mock的target是接口,而不是class,這樣,方法才能被動態替換。
2. Automatic Property
這個東西應該算得上是令Java程序員最羨慕的東西了,和Java相比,省去了繁瑣的getter和setter。其實在現在強大的IDE的幫助下,生成getter和setter並不是什麼大問題,也是很方便的。但是,有了Automatic Property,代碼中不再需要定義這些冗余的方法了,使得代碼更簡潔,更易讀。
3. Linq
Linq這東西可以說是每個C#程序員必不可少的工具,通過使用Linq我們的代碼更加簡潔直觀。同時,通過Linq的可拓展性,我們不但在訪問Collection時才可以使用Linq,在處理XML,數據庫,處理文本的時候同樣可以使用,這統一了很多不同環境的API,使我們大大提高代碼效率。
4. DataTable
DataTable提供了一個在內存中表示數據庫表的方法,使用DataTable,我們可以很容易的對數據庫進行輕量操作。當然,當數據量很大的時候,DataTable這種形式還是很有問題的,畢竟要把數據都讀到內存裡。個人認為DataTable最大的魅力其實是在數據顯示和更新上,通過DataTable顯示數據,我們不需要生成POCO,可以大大提高工作效率,同時,由於DataTable本身支持對Row狀態的管理,我們可以很容易知道哪些數據被用戶修改過,而只把這部分數據存儲。DataTable還支持數據XML導出,我們可以很容易對數據進行序列化和反序列化。最後,DataTable通過Linq
Extension可以支持全部的Linq功能,可以使我們在內存中對數據方便的進行各種操作。總結一下,在我們需要快速完成工作,生成Prototype的時候,DataTable絕對我們值得信賴的多面手。
5. Expression Tree
Linq背後的真正功臣。當我們在使用Linq的時候,無時無刻不在使用Expression Tree。直接使用Expression Tree則可以很容易的解決一些我們在靜態語言中很難解決的問題。以後有時間我會向大家介紹一下最近在工作中遇到的一個例子。
6. Extension Method
這個東西很多人都說他是Magic,最初接觸它的時候,我本人對Extension Method非常不感冒,原因很簡單,那就是方法在類中找不到了,這讓代碼的可讀性大大下降。但是,不得不說Extension Method可以省去了很多Utility類,同時,這種隨用隨加的方式,可以很好地提高代碼的重用性。Extension method還有一個可以簡化接口設計的妙用,以後給大家介紹。
7. Indexer
使用Indexer這個東西可以很好得對一些collection的復雜下標操作進行封裝,在設計一些特殊的數據結構的時候,例如稀疏矩陣,會很好用,可以很好地統一接口和封裝操作。
8. Dynamic
Dynamic變量在我們需要處理很復雜的接口繼承,需要頻繁Cast類的時候,對簡化代碼有奇效。但是,和所有動態語言一樣,一旦使用了Dynamic變量,所有的靜態檢查也就失靈了,同時,Dynamic的背後也是Expression tree,當發生異常的時候,產生的Exception往往非常難懂,所以,使用dynamic的代碼,都最好經過嚴格的單元測試。這裡說明一下,很多人會把dynamic和DynamicObject搞成是一個東西,其實這兩個東西真的是不同的,只是有一些關系而已。