首先需要聲明的是“文法糖”這個詞絕非貶義詞,它可以給我帶來友善,是一種便捷的寫法,編譯器會幫我們做轉換;而且可以提高開發編碼的效率,在性能上也不會帶來損失。這讓java開發人員羨慕不已,呵呵。
1. 經過簡化的Property
早些時候我們這樣聲明Property
1 2 3 4 5 6 7 8 9 10 11 | |
千篇一律的這樣聲明,沒有多大意義,于是C#的設計人員将這個千篇一律的工作交給了編譯器幫我們做了,我們現在可以這樣聲明
|
當然他不會犧牲靈活性,我們可以單獨給get或者set設定通路限制符,例如
|
2. 經過兩次變異的委托寫法
在.net 1.1時我們不得不聲明方法後才在委托中使用,在.net 2.0之後我們可以使用匿名委托,他不單可以簡化寫法,還可以在匿名委托中通路範圍内的變量;再後來拉姆達表達式來了,寫法就更簡便了。
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | |
3. 集合類的聲明
之前我們聲明一個List并給list賦初始值,必須得這麼寫:
|
現在不需要了,直接寫就可以了
|
4. 集合類各個項的操作
我們為了逐個處理集合中的項,需要這麼寫:
|
現在不需要了,這樣就可以了
|
代碼是不是清爽了很多。
5. using == try finally
為了在使用完畢時釋放資源,我們經常要用using,using實質上就是try fiannaly的一個文法糖而已。例如
|
上面的代碼可以簡化為:
|
6. 可愛的var
var的意義時不必寫聲明的類型,編譯器會根據後面對var的指派判斷它的類型,var的類型一旦确認就不能再改變,它隻能作為局部變量使用,不能用做字段也不能用做參數聲明。
例如:
|
|
7. 問号的演變
老掉牙的一個問号+冒号
|
新寶寶兩個問号 ??,它表示左邊的變量如果為null則值為右邊的變量,否則就是左邊的變量值
|
8. 類型執行個體化的文法糖
|
我們沒有為上面的類聲明構造函數,但是我們可以像下面的形式來執行個體化它
|
9. 傳說中的擴充方法
在c#3.5時引入了擴充方法,我們可以在不修改類源碼的情況下給類增加執行個體方法,這個很有意義。它的實質也是一種文法糖的實作
例如我們給String類擴充一個IsNumber的方法:
|
我們可以在String執行個體上調用這個方法了
|
10.使用匿名類
|
匿名類在linq to sql或者entity framework中傳回查詢資料時很好用。
如果大家還有更多的文法糖,歡迎分享。同時希望大家享受文法糖,因為他可以給我們帶來友善,請不要對它嗤之以鼻,也沒必要對它嗤之以鼻。