看看C# 6.0中那些语法糖都干了些什么(上篇)
一:自己主動(dòng)初始化屬性
???? 確實(shí)這個(gè)比之前的版本號(hào)簡(jiǎn)化了一下。只是你肯定非常好奇。究竟編譯器給我們做了哪些東西呢?
1 class Student 2 { 3 public string Name { get; set; } = "ctrip"; 4 }
?
從這張圖中能夠看到,在ctor中<Name>k__backingfield=“ctrip“的賦值在base::ctor之前,這就說明name是變量初始化賦值。而不屬于
構(gòu)造函數(shù)賦值。那有什么差別呢,假設(shè)base::ctor在<Name>k__backingfield=”ctrip"之前,那就是構(gòu)造函數(shù)賦值了,只是我得特別要指明
一下,是源碼級(jí)別的差別,而不是IL中的差別。由于在IL中都是構(gòu)造函數(shù)賦值。只是語句順序不一樣而已,然后我把內(nèi)部做的代碼復(fù)原例如以下:
1 class Student 2 { 3 private string k__BackingField = "ctrip"; 4 5 public string Name 6 { 7 get 8 { 9 return k__BackingField; 10 } 11 12 set 13 { 14 k__BackingField = value; 15 } 16 } 17 }然后再看看怎么讓base::ctor在<Name>k__backingfield="ctrip"之前。
1 class Student 2 { 3 private string k__BackingField; 4 5 public string Name 6 { 7 get 8 { 9 return k__BackingField; 10 } 11 12 set 13 { 14 k__BackingField = value; 15 } 16 } 17 18 public Student() 19 { 20 k__BackingField = "ctrip"; 21 } 22 }?
不好意思,一不小心就扯到了變量初始化和構(gòu)造函數(shù)賦值在源碼級(jí)別的差別。
?
二:僅僅讀屬性初始化
這個(gè)也是一個(gè)超級(jí)好玩的屬性,先來看看代碼:
1 class Student 2 { 3 public string Name { get; } 4 5 public Student(string name) 6 { 7 Name = name; 8 } 9 }可是我們記得,在之前的C#版本號(hào)是不能這么寫。但如今惹不住好奇心,先去底層看看究竟生成了什么。
?
?
然后我就奇怪了,屬性本來就能夠是僅僅讀的,如今編譯器已經(jīng)放開了,那是不是有問題了,我假設(shè)真的是須要一個(gè)僅僅讀屬性。這個(gè)該怎樣是好
呢?然后我就試著在Name屬性中返回一個(gè)值,果然編譯器不放行。這就說明編譯器在里面還做了一個(gè)貌似合理的推斷。
?
三:Lambda充當(dāng)函數(shù)體
這個(gè)聽起來就有點(diǎn)怪怪的,還是先看個(gè)樣例。
1 class Student 2 { 3 public string Name => "ctrip"; 4 5 public void Print(string name) => Console.WriteLine(name); 6 }只是當(dāng)我看到這樣的寫法時(shí)。我也是醉了。假如你一年都沒有接觸C#,再回來看時(shí)。我想你肯定看不懂這些雞巴代碼了。
。。沒辦法。還得繼續(xù)
看看IL在底層都做了些什么?
?
當(dāng)看到IL的時(shí)候再次醉了。事實(shí)上=>不過一個(gè){}方法體括號(hào)而已呀!
這不是徒增我們的學(xué)習(xí)成本么?然后我就繼續(xù)想。這里的函數(shù)體就一條
console.wirteline語句,那我要是灌幾條語句會(huì)怎么樣呢?能夠想象肯定是要加括號(hào)的,可是我真的加上{}后。編譯器凌亂了。。。
?
那這個(gè)圖就告訴我們。C#6.0的lamaba充當(dāng)函數(shù)體的語法糖僅僅適合一條語句。假設(shè)真要做到多條語句。那你僅僅能單獨(dú)提取一個(gè)方法出來。
就像以下這樣。
轉(zhuǎn)載于:https://www.cnblogs.com/wzzkaifa/p/7242919.html
總結(jié)
以上是生活随笔為你收集整理的看看C# 6.0中那些语法糖都干了些什么(上篇)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习(四)决策树
- 下一篇: Python自动化开发课堂笔记【Day1