屬性賦初始值的四種寫法--C#6.0新特性
1 介紹
在C# 6.0 語法出來前,屬性的賦初始值使用get;set;雖然已經相對於最原始的寫法簡潔了非常多,但是還不夠,還不夠,還不夠。。。今天剛好一直在想著前幾天朋友問我的有關屬性賦初始值的問題,便自己試了一下,感覺6.0提供了更好的寫法。
2 程式碼
(1)原始寫法
在不知道哪個版本的C# 中,提供了最原始的寫法。那麼上程式碼看一下
private string _text = null; public string text { get { return _text; } set { _text = value; } }
這應該是最原始的寫法了,應該也算是最麻煩的一種寫法。但是,接下來所說的所有寫法,都算是語法糖,經過反編譯之後,還是寫成這種寫法。
(2)6.0之前的寫法
不得不提的是,巨硬真的是對開發者真的貼心,雖然經常會好心辦壞事。那麼看一下有了語法糖之後是怎麼寫的 public string text { get; set; }
可以明顯看出來,有了語法糖之後,真的是寫起來非常舒服。那麼就有一個問題:如果給屬性賦初始值,在6.0語法出來以前,據我所知有兩種
1 、建構函式
2、 不適用這個語法糖,用第一種寫法
按照微軟的貼心程度以及C#在語法糖的道路上越來越遠,在6.0就提供了新的語法糖
(3)屬性允許賦初始值
手握這顆語法糖,那麼就可以使用新的寫法了,那麼來看一下:
public string text { get; set; } = "王二狗";
可以明顯看出來,這種寫法是比較簡單的。不慌,還有一顆糖可以吃。
(4)在屬性/方法裡面使用Lambda表示式
有了這顆糖,我們再來看一下怎麼寫:
public string text => "二狗子";
那麼這句是不是更簡潔了,在6.0中允許使用lambda表示式賦初始值,根據lambda的一系列規則之下,就是這個樣子了。具體lambda的規則,在這裡我就不再詳細解釋了。
3 例子
上面只是最簡單的用法,那麼我們來舉個栗子吧。
找個場景吧:在類裡 ,有一個屬性Text,屬性型別為string,
public string Text { get; set; }
現在需要根據string是不是為空來對另一個屬性flag進行復制。那麼我們看一下應該怎麼寫
(1) 原始寫法
private bool _flag = true; public bool flag { get { if (Text == "") { return true; } return false; } set { _flag = true; } }
使用最初的寫法來寫,以前也是一直都這麼寫的,確實是比較麻煩的,寫了幾次都記不住這個寫法。
(2)新語法
public bool flag => Text == "" ? true : false;
比較一下吧,想一想,兩種寫法比較一下 ,哪個好很顯然了。
4 總結
有些人數,C#的語法糖太多了,程式設計師都成了傻子了,但是實際用起來,還是會叫真香。
那麼,為什麼我不用2中(3)屬性允許賦初始值這種寫法呢? 因為水平有限,不會寫。
--------------------------------------------------------------------------------------
開玩笑
public bool flag { get; set; } = Text == "" ? true : false;
這種寫法中,Text不可引用非靜態欄位,這樣的情況下,那麼就需要將Text加上一個static,變為非靜態欄位。
好啦 就寫到這裡吧,如有不正確,請指正!