首頁>技術>

C# 8.0與.NET Core 3.0一起釋出,這兩個版本在.NET Conf 2019中同時釋出。

作為C# 8.0的一部分,有很多新特性發布了,這裡我挑出了前五名。

只讀成員(Readonly members)

我們已經使用readonly變數很長一段時間了,有以下的一些優點:

類或結構不可變。物件在預設情況下是執行緒安全的狀態不能被修改,這意味著與哪個執行緒使用物件無關

現在我們可以對結構體的任何成員應用readonly修飾符,這對於struct來說意義重大,因為它是一個值型別。

使用(Usage)

public struct Employee {      public string FirstName {          readonly get;          set;      }      public string SecondName {          readonly get;          set;      }      public readonly string Name => $ "{FirstName} {SecondName}";  }   
使用宣告(Using Declaration)

使用宣告有一個很酷的快捷方式,因為它消除了使用花括號的程式碼塊。

而不是這樣寫:

public void GetEmployeeDetails(int employeeID) {      using(var conn = new SqlConnection("connectionstring")) {          //code for retrieving the employee details.          //Connection will be disposed here as its internally a try- catch-finally block      }  }   

現在我們可以這樣寫:

public void GetEmployeeDetails(int employeeID) {      using      var conn = new SqlConnection("connectionstring");      //code for retrieving the employee details.      //Connection will be disposed  }  
預設的介面方法(Default Interface Method)

現在我們可以將預設方法新增到介面中。其思想是,我們可以在以後使用預設實現向介面新增方法,這樣現有的實現就不會失敗。我喜歡這個想法,但我不確定這個功能會有多有用,也不確定它會帶來多少困惑,它是Scala等其他語言中的內聯特徵。

使用(Usage)

//AsynEnumberable usage  public static async IAsyncEnumerable < string > GenerateRandomValues() {      Random rnd = new Random();      for (int i = 0; i < 20; i++) {          await Task.Delay(1000);          yield          return $ "A-{rnd.Next(1000)}";      }  }  
非同步流(Asynchronous streams)

在我看來,這是最令人興奮的特性之一。到目前為止,我們只返回IEnumerable,這很有用,因為我們可以在IEnumerable上編寫LINQ查詢。現在我們可以非同步地建立和使用流了。

使用(Usage)

await foreach(var n in GenerateRandomValues()) {      Console.WriteLine($ "Random Value : {n}");  } 

如下所示呼叫此方法,

await foreach(var n in GenerateRandomValues()) {      Console.WriteLine($ "Random Value : {n}");  } 
屬性模式(Property Pattern)

這絕對是我最喜歡的功能之一,能夠匹配屬性是無價的,語法也非常簡單。讓我們看看下面的例子。

public static string GetFamilyName(Employee employee) => employee  switch {      {          FirstName: "Prasad"      } => "Pulickal", {          FirstName: "Pradeep"      } => "Thekkeveli", {          FirstName: "Praveen"      } => "PuthanMadam",      _ => "Not Available"  };  

請看一下switch的語法,這裡“switch”在變數地址後面。在這個例子中,如果員工的名字是“Prasad”,那麼他的姓就是“Pulickal”,以此類推。除此之外,他們的姓氏也將“暫不公開”。這裡的任何東西都用下劃線(_)表示,我相信這在所有語言的模式匹配中都是相當標準的。

16
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 春節假期學習日記之Nodejs(08)