C#12中的Primary Constructors(主建構函式)

2023-11-17 09:00:38

什麼是主建構函式

把引數新增到class與record的類宣告中就是主建構函式。例如

class Person(string name)
{
    private string _name = name;
}    

這種寫法與以下程式碼寫法一樣

class Person
{
    private string _name;
    public Person(string name)
    {
        _name = name;
    }
}

需要注意的是,類的所有其他建構函式都必須通過 this() 建構函式呼叫直接或間接呼叫主建構函式。

class Person(string name)
{
    public Person(int age,string name):this(name)
    {
                
    }
}

主建構函式引數的最常見用途包括但不限於以下幾個方面:

  • 初始化基礎類別。
  • 初始化成員欄位或屬性。
  • 簡化依賴注入

下面分別介紹。

 

初始化基礎類別

可以從派生類的主建構函式呼叫基礎類別的主建構函式。 這是編寫必須呼叫基礎類別中主建構函式的派生類的最簡單方法。
class Person(string name)
{
    private string _name = name;
}

class Man(string name):Person(name)
{

}
派生類如沒主建構函式,可以在派生類中建立一個建構函式,用於呼叫基礎類別的主建構函式
class Person(string name)
{
    private string _name = name;
}

class Woman : Person
{
    public Woman(string name) : base(name)
    {

    }
}

 

初始化成員欄位或屬性

以下程式碼,通過主建構函式初始化了一個欄位:
class Person(string name)
{
    private string _name = name;
}

 

簡化依賴注入

主建構函式的另一個常見用途是指定依賴項注入的引數。 下面的程式碼建立了一個簡單的控制器,使用時需要有一個服務介面:
public interface IService
{
    Distance GetDistance();
}

public class ExampleController(IService service) : ControllerBase
{
    [HttpGet]
    public ActionResult<Distance> Get()
    {
        return service.GetDistance();
    }
}

總的來說,主建構函式簡化了我們的程式碼編寫,一旦使用了主建構函式,主建構函式引數是必須呼叫的建構函式的引數。