亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

三十分鐘快速掌握C# 6.0知識點

2019-10-29 21:12:40
字體:
來源:轉載
供稿:網友

css/212853.html">color: #ff0000">一、只讀自動屬性(Read-only auto-properties)

 C# 6之前我們構建只讀自動屬性:

 public string FirstName { get; private set; } public string LastName { get; private set; }

原理解析:就是編譯器在生成set訪問器時,它的修飾符是private,由上可知所謂的只讀只是針對類外部,在類內部還是可以隨意修改屬性值的。

C# 6中提供了真正的只讀自動屬性,寫法如下:

 public string FirstName { get; } public string LastName { get; }

原理解析:首先編譯器會生成一個readonly的私有字段而get訪問器就是返回該字段的值,由上可知該只讀自動屬性只能在構造函數中為其賦值。

二、自動屬性初始化器(Auto-Property Initializers)

以前自動屬性的賦值操作我們只能寫在方法中,如構造函數:

 public Student(string firstName, string lastName) { FirstName = firstName; LastName = lastName; }

但在C# 6中我們可以把賦值操作當作聲明的一部份,如下所示:

 public string FirstName { get; set; } = "Corleone"; public string LastName { get; set; } = "Mike";

備注:其實C# 6和之前的版本都一樣賦值操作最終都是在方法中完成,但后者明顯更簡潔直觀,所以這是個不錯的語法糖。

三、函數成員的表達式體(Expression-bodied function members)

C# 6中提供的一個新語法:對于只有一條語句的方法體可以簡寫成表達式。如下面兩種情況:

1. 方法(Methods)

 public Student Create() => new Student();

 

等同于:

 public Student Create() {  return new Student(); }

2. 只讀屬性(read only properties)

 public string FullName => string.Format("{0},{1}", FirstName, LastName);

等同于:

public string FullName {  get  {   return string.Format("{0},{1}", FirstName, LastName);  } }

原理解析:上面的表達式在編譯后會生成最原始的方法體和訪問器,值得一提的是函數表達式體跟Lambda是兩個相似但不相同的東西,函數的表

達式體只能帶一句話且不能包含return關鍵字但Lambda 能帶語句塊和包含關鍵字。

四、使用靜態(using static)

C# 6中的一個新語法:使用類型的靜態成員時可以省略其類型,如下所示:

 using static System.String;  // 先導入對應成員類型 public bool IsNull(string str) => IsNullOrEmpty(str); 

等同于:

 public bool IsNull(string str) => string.IsNullOrEmpty(str);

總結:該語法糖的目的是使代碼變得更簡潔,但這個應該是區分使用場景的,如:數學計算(Math類)使用此語法糖的確能夠簡潔代碼提高可讀

性,但在某處如果導入過多的類型那么不僅不能提高閱讀性反而會增加閱讀難度,因為你不知道這些成員具體屬于那個類型。還有若類型本身存在同名成員使用時則會使用類型成員覆蓋。

注意:使用靜態這一語法糖并不適用擴展方法,因為擴展方法的設計理念就是不修改已有代碼且只能在一定范圍內使用,所以在特殊情況下需要將

其當作靜態方法來使用,那么使用類名調用反而是比較明智的。

五、Null條件運算符(Null-conditional operators)

稍有經驗的童鞋都知道在Coding過程中經常要判斷變量的值是否為null,類似這種if-else的操作還不少。這使得代碼看起來十分不簡潔,好在C#6中提供了解決方法:

 var student = new Student(); var firstName = student?.FirstName;

等同于:

var student = new Student(); string firstName = null; if (student != null) {  firstName = student.FirstName; }

使用方法:只需替換成員訪問符 . 為 ?. ,若 ?. 左邊為null則整個運算符的結果也為null,否則運算符的結果就等于其成員值。假如成員的類型為值

類型則整個表達式返回的類型是對應類型的可空類型,如:

 int? age = student?.Age;

原理解析: ?. 編譯后就是 if 或 三元運算符,非賦值操作(如:call)會編譯成 if,賦值操作一般會編譯成三元運算符。

六、字符串插值(String Interpolation)

C# 6中提供了一種新語法來構建格式化字符串,如:

 var fullName = $"{student.FirstName},{student.LastName}";

等同于:

 var fullName = string.Format("{0},{1}", student.FirstName, student.LastName);

使用方法:只需在字符串前加上$符號,然后在大括號中填寫表達式(字段、方法、Lambdad...)即可。

備注:

1. 字符串插值語法支持以前所有字符串格式設置,如:

 Console.WriteLine($"平均成績:{student.GPA:F2}");

注:因為 : 總被編譯器解釋為表達式與字符串格式的分隔符,所以表達式中若有條件運算符則我們需要用括號來強制編譯將其解析成當前語境所要

表達的意義。如:

 Console.WriteLine($"平均成績:{(student.GPA > 80 ? student.GPA : 0):F2}");

2. 字符串插值語法可以嵌套,如:

 var score = $"我的各科成績:{ $"數學:{student.MathScores};英語:{student.EnglishScore};"}";

原理解析:$"xxx{expression1}xxx{expression2}..." 編譯后就是string.Format()。

七、異常過濾器(Exception Filters)

C# 6中的一個新功能就是異常過濾器,它可以使我們在恰當的時機來應用Catch子句,如:

try {  throw new WebException("Request timed out..", WebExceptionStatus.Timeout); } catch (WebException webEx) when (webEx.Status == WebExceptionStatus.Timeout) {  // Exception handling }

使用方法:try-catch() when()。

總結:異常過濾器最大的亮點就是在使用恰當的情況下可以不丟失異常引發點的堆棧信息,這對程序的排錯至關重要。另外它還有很多有意思的用法,大家可以上網查下。

八、nameof表達式(nameof Expressions)

nameof 表達式的功能是獲取成員名稱,如拋異常:

public string FullName(Student student) {  if (student == null)   throw new ArgumentNullException(nameof(student));  return $"{student.FirstName},{student.LastName}"; }

優點:nameof 表達式它能夠理解成員,當成員被重命名時nameof表達式中也重命名了,而常量字符串表示法是沒有這樣的優勢。

缺點:nameof 表達式生成的是不完全限定名,若你需要完全限定名 nameof 就不能幫你了。

原理解析:nameof 是編譯期間就確定其(成員)字符串名稱的,即編譯后就是常量字符串的表現形式了。

九、在Catch和Finally中使用Await(Await in Catch and Finally blocks)

C# 5 提供的 async 和 await 使異步編程變得極為簡便,但它們也有著局限性:await在catch和finally塊中不能使用。但這個問題已在C# 6中得到了解決,如:

public static async Task<string> MakeRequestAndLogFailures() {  await logMethodEntrance();  try  {   // ....   var responseText = await streamTask;   return responseText;  }  catch (System.Net.Http.HttpRequestException e) when (e.Message.Contains("301"))  {   await logError("Recovered from redirect", e);   return "Site Moved";  }  finally  {   await logMethodExit();  } }

十、Index初始化器(Index Initializers)

這個功能并沒有什么新意,其實以前就支持集合/字典 初始化器了,如:

var list = new List<string>() {  "Mike",  "Jim" };  var dic = new Dictionary<int, string>() {  { 20, "Mike" },  { 30, "Jim" } };

在C# 6中只是字典初始化器支持了新的寫法,如:

 var dic = new Dictionary<int, string>() {  [20] = "Mike",  [30] = "Jim" };

總結:暫無發現特殊的用法。

十一、改進的重載解析—編譯器(Improved overload resolution)

 這算不上是新語法,因為僅僅是編譯器的改進,之所以一提是想讓大家知道有這么一回事。以前的編譯器是識別不了 Task.Run(Func<Task>())的,如下:

static Task DoThings() {  return Task.FromResult(0); }  Task.Run(DoThings); // 此處省略方法代碼...

上述代碼在老版本編譯器下是編譯不通過的,而在新版本編譯器是能編譯通過的。

備注:值得一提的是新版本編譯器也只是識別了Task.Run(Func<Task>()),Task.Run(Action) 還是識別不了,總的來說此功能對我們用處不大,

還不如乖乖的寫回Lambda表達式。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91在线观看免费观看| 精品久久久久久亚洲精品| 精品国产福利在线| 亚洲激情第一页| 日韩国产中文字幕| 日本中文字幕久久看| 日韩成人在线视频| 精品国产欧美一区二区五十路| 最近2019中文字幕mv免费看| 91精品久久久久| 久久精品亚洲国产| 欧美裸体xxxx| 97涩涩爰在线观看亚洲| 亚洲品质视频自拍网| 亚洲大胆人体视频| 777777777亚洲妇女| 欧美电影免费观看大全| 日本精品视频在线观看| 欧美性xxxx极品高清hd直播| 久久在线观看视频| 粉嫩老牛aⅴ一区二区三区| 久久久久久久一| 伊人伊成久久人综合网小说| 国产精品视频资源| 国产成人精品一区二区| 一区二区欧美日韩视频| 欧美性资源免费| 久久男人av资源网站| 成人有码视频在线播放| 91精品国产色综合久久不卡98| 中文一区二区视频| 中文字幕日韩有码| 91九色蝌蚪国产| 亚洲大胆人体视频| 亚洲精品美女视频| 欧洲亚洲在线视频| 国产精品igao视频| 一区二区三区视频免费| 一区二区在线视频| 韩国美女主播一区| 欧美精品videos性欧美| 国产精品久久久久免费a∨| 久久九九全国免费精品观看| 日韩禁在线播放| 国产精品久久久av| 综合网日日天干夜夜久久| 2019中文字幕免费视频| 日韩中文在线不卡| 北条麻妃一区二区三区中文字幕| 国产一区二区三区在线视频| 日本国产欧美一区二区三区| 国产精品一区二区av影院萌芽| 国产精品久久久久9999| 亚洲欧美中文日韩在线| 亚洲精品国偷自产在线99热| 久久久亚洲国产天美传媒修理工| 91精品国产综合久久久久久蜜臀| 国产一区二区三区视频在线观看| 国产欧美一区二区三区在线看| 精品成人乱色一区二区| 亚洲激情在线观看视频免费| 日韩精品在线免费| 欧美激情视频免费观看| 国产精品视频男人的天堂| 国产专区精品视频| 亚洲欧美国产日韩中文字幕| 久久精品中文字幕免费mv| 久久久久五月天| 久久久精品在线观看| 一本色道久久88亚洲综合88| 亚洲一区二区三区视频| 国产一区二区三区在线播放免费观看| 久久久精品国产一区二区| 国产自产女人91一区在线观看| 久久综合伊人77777尤物| 日韩国产高清视频在线| 中文国产亚洲喷潮| 中文字幕在线视频日韩| 日韩精品极品在线观看播放免费视频| 欧美性69xxxx肥| 欧美极品少妇全裸体| 久久天堂av综合合色| 中文字幕欧美精品在线| 欧洲美女免费图片一区| 91久久国产精品| 国产精品久久久久av| 国产色综合天天综合网| 国产亚洲精品日韩| 成人免费自拍视频| 国内伊人久久久久久网站视频| 91欧美精品午夜性色福利在线| 国内精品久久久久久中文字幕| 国产欧美日韩免费| 97视频在线观看亚洲| 日韩极品精品视频免费观看| 中文字幕亚洲欧美在线| 国产剧情久久久久久| 日韩av在线资源| 51色欧美片视频在线观看| 久久久国产一区二区三区| 国产精品成av人在线视午夜片| 日韩高清有码在线| 亚洲香蕉av在线一区二区三区| 色琪琪综合男人的天堂aⅴ视频| 亚洲一区久久久| 欧美在线免费观看| 国产亚洲欧美日韩精品| 美女999久久久精品视频| 日韩精品在线第一页| 一本一本久久a久久精品牛牛影视| 俺去了亚洲欧美日韩| 欧美午夜精品久久久久久人妖| 欧美电影免费观看网站| 成人有码视频在线播放| 欧美性jizz18性欧美| 欧美激情视频网站| 日本成人精品在线| 国产精品自产拍在线观看中文| 国产在线日韩在线| 久久久久久亚洲| 亚洲国产成人精品久久| 亚洲福利在线视频| 日韩欧美在线中文字幕| 久久国产精品影视| 欧美大胆a视频| 亚洲最新av网址| 欧美国产精品va在线观看| 国产欧美日韩免费看aⅴ视频| 国产精品18久久久久久首页狼| 国内自拍欧美激情| 成人中文字幕+乱码+中文字幕| 国产色婷婷国产综合在线理论片a| 欧美日韩亚洲91| 亚洲欧美日韩图片| 在线日韩日本国产亚洲| 亚洲精品日韩丝袜精品| 国产偷亚洲偷欧美偷精品| 97国产真实伦对白精彩视频8| 日韩av手机在线| 亚洲一区二区三区毛片| 国内精品模特av私拍在线观看| 国产精品丝袜久久久久久高清| 色先锋资源久久综合5566| 欧美视频中文字幕在线| 国产丝袜一区视频在线观看| 另类天堂视频在线观看| 欧美疯狂做受xxxx高潮| www.欧美三级电影.com| 国产精品人成电影| 国产精品中文字幕在线观看| 伊人激情综合网| 亚洲电影第1页| 国产免费一区视频观看免费| 亚洲jizzjizz日本少妇| 最近2019中文字幕大全第二页| 亚洲欧美自拍一区| 日韩欧美成人免费视频| 国产一区二区黑人欧美xxxx| 第一福利永久视频精品| 久久视频在线视频| 国产精品麻豆va在线播放| 在线午夜精品自拍| 国产精品中文字幕在线| 欧美黑人极品猛少妇色xxxxx|