什麼是主構造函數 把參數添加到class與record的類聲明中就是主構造函數。例如 class Person(string name) { private string _name = name; } 這種寫法與以下代碼寫法一樣 class Person { private string _nam ...
什麼是主構造函數
把參數添加到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(); } }
總的來說,主構造函數簡化了我們的代碼編寫,一旦使用了主構造函數,主構造函數參數是必須調用的構造函數的參數。