C#12 新功能 (1)

C#12 也出現一陣子了,這陣子來整理整理一些新功能的介紹

primary constructors

這玩意被稱為「主要建構式」,大概有幾個特點:

  1. 這功能讓型別宣告和建構式的宣告混成一行
  2. 類別與結構都可以用
  3. 當你在類別上這麼做的時候表示已經有建構式,所以編譯器不會幫你自動產生無參數建構式

來個簡單的例子:

public class Person(string name, int age, string memo)
{   
    public string Name { get; } = name;
    public int Age { get; } = age;
    public string Memo { get; } = memo;
}

第一行的 public class Person(string name, int age, string memo) 同時宣告一個 class Person 以及它的建構式 Person(string name, int age, string memo)。

展開來後大致長得像這樣:

public class Person
{
    public Person(string name, int age, string memo)
    {
        Name = name; 
        Age = age; 
        Memo = memo;
    }
    public string Name { get; } 
    public int Age { get; } 
    public string Memo { get; }
}

可以少打很多字,還不錯。

default lambda parameters

C# 10 在 Lambda 語法上做了一些增強,可以參考之前的文章 C# 10 新功能 -- Lambda ,以之前的基礎又加上新的 default lambda parameters 特性,名字取得很炫,其實就是選擇性參數的意思。這有一個前提,就是參數必須是顯式指派型別才可以使用這功能,使用起來很簡單,相信你看了以下的範例就懂了:

 var addBy = (int value1, int value2 = 1) => value1 + value2;
 Console.WriteLine(addBy(10, 5)); // 輸出 15
 Console.WriteLine(addBy(20)); // 輸出 21

先介紹這兩個新功能當作開場,後續再來聊其他的。