最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

三十分鐘快速掌握C# 6.0知識(shí)點(diǎn)

 更新時(shí)間:2017年03月06日 14:11:01   作者:雨夜瀟湘  
這篇文章主要介紹了C# 6.0的相關(guān)知識(shí)點(diǎn),文中介紹的非常詳細(xì),通過(guò)這篇文字可以讓大家在三十分鐘內(nèi)快速的掌握C# 6.0,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。

一、只讀自動(dòng)屬性(Read-only auto-properties)

 C# 6之前我們構(gòu)建只讀自動(dòng)屬性:

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

原理解析:就是編譯器在生成set訪(fǎng)問(wèn)器時(shí),它的修飾符是private,由上可知所謂的只讀只是針對(duì)類(lèi)外部,在類(lèi)內(nèi)部還是可以隨意修改屬性值的。

C# 6中提供了真正的只讀自動(dòng)屬性,寫(xiě)法如下:

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

原理解析:首先編譯器會(huì)生成一個(gè)readonly的私有字段而get訪(fǎng)問(wèn)器就是返回該字段的值,由上可知該只讀自動(dòng)屬性只能在構(gòu)造函數(shù)中為其賦值。

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

以前自動(dòng)屬性的賦值操作我們只能寫(xiě)在方法中,如構(gòu)造函數(shù):

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

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

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

備注:其實(shí)C# 6和之前的版本都一樣賦值操作最終都是在方法中完成,但后者明顯更簡(jiǎn)潔直觀,所以這是個(gè)不錯(cuò)的語(yǔ)法糖。

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

C# 6中提供的一個(gè)新語(yǔ)法:對(duì)于只有一條語(yǔ)句的方法體可以簡(jiǎn)寫(xiě)成表達(dá)式。如下面兩種情況:

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);
  }
 }

原理解析:上面的表達(dá)式在編譯后會(huì)生成最原始的方法體和訪(fǎng)問(wèn)器,值得一提的是函數(shù)表達(dá)式體跟Lambda是兩個(gè)相似但不相同的東西,函數(shù)的表

達(dá)式體只能帶一句話(huà)且不能包含return關(guān)鍵字但Lambda 能帶語(yǔ)句塊和包含關(guān)鍵字。

四、使用靜態(tài)(using static)

C# 6中的一個(gè)新語(yǔ)法:使用類(lèi)型的靜態(tài)成員時(shí)可以省略其類(lèi)型,如下所示:

 using static System.String;  // 先導(dǎo)入對(duì)應(yīng)成員類(lèi)型
 public bool IsNull(string str) => IsNullOrEmpty(str); 

等同于:

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

總結(jié):該語(yǔ)法糖的目的是使代碼變得更簡(jiǎn)潔,但這個(gè)應(yīng)該是區(qū)分使用場(chǎng)景的,如:數(shù)學(xué)計(jì)算(Math類(lèi))使用此語(yǔ)法糖的確能夠簡(jiǎn)潔代碼提高可讀

性,但在某處如果導(dǎo)入過(guò)多的類(lèi)型那么不僅不能提高閱讀性反而會(huì)增加閱讀難度,因?yàn)槟悴恢肋@些成員具體屬于那個(gè)類(lèi)型。還有若類(lèi)型本身存在同名成員使用時(shí)則會(huì)使用類(lèi)型成員覆蓋。

注意:使用靜態(tài)這一語(yǔ)法糖并不適用擴(kuò)展方法,因?yàn)閿U(kuò)展方法的設(shè)計(jì)理念就是不修改已有代碼且只能在一定范圍內(nèi)使用,所以在特殊情況下需要將

其當(dāng)作靜態(tài)方法來(lái)使用,那么使用類(lèi)名調(diào)用反而是比較明智的。

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

稍有經(jīng)驗(yàn)的童鞋都知道在Coding過(guò)程中經(jīng)常要判斷變量的值是否為null,類(lèi)似這種if-else的操作還不少。這使得代碼看起來(lái)十分不簡(jiǎn)潔,好在C#6中提供了解決方法:

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

等同于:

var student = new Student();

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

使用方法:只需替換成員訪(fǎng)問(wèn)符 . 為 ?. ,若 ?. 左邊為null則整個(gè)運(yùn)算符的結(jié)果也為null,否則運(yùn)算符的結(jié)果就等于其成員值。假如成員的類(lèi)型為值

類(lèi)型則整個(gè)表達(dá)式返回的類(lèi)型是對(duì)應(yīng)類(lèi)型的可空類(lèi)型,如:

 int? age = student?.Age;

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

六、字符串插值(String Interpolation)

C# 6中提供了一種新語(yǔ)法來(lái)構(gòu)建格式化字符串,如:

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

等同于:

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

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

備注:

1. 字符串插值語(yǔ)法支持以前所有字符串格式設(shè)置,如:

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

注:因?yàn)?: 總被編譯器解釋為表達(dá)式與字符串格式的分隔符,所以表達(dá)式中若有條件運(yùn)算符則我們需要用括號(hào)來(lái)強(qiáng)制編譯將其解析成當(dāng)前語(yǔ)境所要

表達(dá)的意義。如:

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

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

 var score = $"我的各科成績(jī):{ $"數(shù)學(xué):{student.MathScores};英語(yǔ):{student.EnglishScore};"}";

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

七、異常過(guò)濾器(Exception Filters)

C# 6中的一個(gè)新功能就是異常過(guò)濾器,它可以使我們?cè)谇‘?dāng)?shù)臅r(shí)機(jī)來(lái)應(yīng)用Catch子句,如:

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

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

總結(jié):異常過(guò)濾器最大的亮點(diǎn)就是在使用恰當(dāng)?shù)那闆r下可以不丟失異常引發(fā)點(diǎn)的堆棧信息,這對(duì)程序的排錯(cuò)至關(guān)重要。另外它還有很多有意思的用法,大家可以上網(wǎng)查下。

八、nameof表達(dá)式(nameof Expressions)

nameof 表達(dá)式的功能是獲取成員名稱(chēng),如拋異常:

public string FullName(Student student)
 {
  if (student == null)
   throw new ArgumentNullException(nameof(student));

  return $"{student.FirstName},{student.LastName}";
 }

優(yōu)點(diǎn):nameof 表達(dá)式它能夠理解成員,當(dāng)成員被重命名時(shí)nameof表達(dá)式中也重命名了,而常量字符串表示法是沒(méi)有這樣的優(yōu)勢(shì)。

缺點(diǎn):nameof 表達(dá)式生成的是不完全限定名,若你需要完全限定名 nameof 就不能幫你了。

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

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

C# 5 提供的 async 和 await 使異步編程變得極為簡(jiǎn)便,但它們也有著局限性:await在catch和finally塊中不能使用。但這個(gè)問(wèn)題已在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)

這個(gè)功能并沒(méi)有什么新意,其實(shí)以前就支持集合/字典 初始化器了,如:

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

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

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

總結(jié):暫無(wú)發(fā)現(xiàn)特殊的用法。

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

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

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

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

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

還不如乖乖的寫(xiě)回Lambda表達(dá)式。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • C#異步編程詳解

    C#異步編程詳解

    本文主要介紹異步編程中Task、Async和Await的基礎(chǔ)知識(shí)。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-02-02
  • Extjs4如何處理后臺(tái)json數(shù)據(jù)中日期和時(shí)間

    Extjs4如何處理后臺(tái)json數(shù)據(jù)中日期和時(shí)間

    本文給大家分享Extjs4如何處理后臺(tái)json數(shù)據(jù)中日期和時(shí)間,通過(guò)代碼示例給大家剖析,感興趣的朋友快來(lái)圍觀
    2015-08-08
  • C# 配置文件app.config 和 web.config詳解

    C# 配置文件app.config 和 web.config詳解

    在 C# 的應(yīng)用開(kāi)發(fā)中,配置文件就像是幕后的大管家,默默管理著應(yīng)用程序的各種設(shè)置,下面通過(guò)本文介紹 C# 中極為重要的兩個(gè)配置文件,app.config 和 web.config的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2025-04-04
  • C#實(shí)現(xiàn)文字視頻生成器的示例代碼

    C#實(shí)現(xiàn)文字視頻生成器的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)簡(jiǎn)易的文字視頻生成器,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下
    2022-10-10
  • C#使用SharpZipLib壓縮解壓文件

    C#使用SharpZipLib壓縮解壓文件

    這篇文章介紹了C#使用SharpZipLib壓縮解壓文件的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • C#中PuppeteerSharp庫(kù)的應(yīng)用詳解

    C#中PuppeteerSharp庫(kù)的應(yīng)用詳解

    PuppeteerSharp是一個(gè)針對(duì)Google Chrome瀏覽器的高級(jí)API庫(kù),這篇文章主要為大家詳細(xì)介紹了PuppeteerSharp庫(kù)在C#中的具體應(yīng)用,需要的小伙伴可以了解下
    2024-01-01
  • WPF實(shí)現(xiàn)環(huán)(圓)形菜單的示例代碼

    WPF實(shí)現(xiàn)環(huán)(圓)形菜單的示例代碼

    這篇文章主要介紹了如何利用WPF繪制一個(gè)簡(jiǎn)單的環(huán)形菜單,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定幫助,需要的可以參考一下
    2022-07-07
  • C# 調(diào)用Delphi dll 實(shí)例代碼

    C# 調(diào)用Delphi dll 實(shí)例代碼

    這篇文章介紹了C# 調(diào)用Delphi dll 實(shí)例代碼,有需要的朋友可以參考一下
    2013-09-09
  • C#實(shí)現(xiàn)讀取Word表格到DataSet

    C#實(shí)現(xiàn)讀取Word表格到DataSet

    在應(yīng)用項(xiàng)目里,多數(shù)情況下我們會(huì)遇到導(dǎo)入 Excel 文件數(shù)據(jù)到數(shù)據(jù)庫(kù)的功能需求,但某些情況下,也存在使用 Word 進(jìn)行表格數(shù)據(jù)編輯的情況,這其中也包括導(dǎo)入Word內(nèi)容的功能,比如表格數(shù)據(jù)導(dǎo)出到DataSet數(shù)據(jù)集,本文將給大家介紹了C#讀取Word表格到DataSet
    2023-12-12
  • C#數(shù)據(jù)結(jié)構(gòu)之堆棧(Stack)實(shí)例詳解

    C#數(shù)據(jù)結(jié)構(gòu)之堆棧(Stack)實(shí)例詳解

    這篇文章主要介紹了C#數(shù)據(jù)結(jié)構(gòu)之堆棧(Stack),結(jié)合實(shí)例形式較為詳細(xì)的分析了堆棧的原理與C#實(shí)現(xiàn)堆棧功能的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-11-11

最新評(píng)論

贡嘎县| 彭泽县| 海晏县| 大悟县| 黄陵县| 长汀县| 红安县| 中山市| 台中市| 宁河县| 盐津县| 六盘水市| 体育| 屏山县| 龙胜| 尉犁县| 曲水县| 东乡族自治县| 林周县| 广东省| 尚志市| 乌拉特前旗| 蚌埠市| 北辰区| 汤阴县| 广南县| 荔浦县| 高台县| 长汀县| 历史| 高邮市| 泊头市| 贵阳市| 阿拉善盟| 淳化县| 林口县| 璧山县| 光泽县| 琼海市| 精河县| 孙吴县|