日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > C# >内容正文

C#

看看C# 6.0中那些语法糖都干了些什么(上篇)

發(fā)布時(shí)間:2024/4/14 C# 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 看看C# 6.0中那些语法糖都干了些什么(上篇) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一:自己主動(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。