當一個類有多個構造函數的時候,常使用this構造器:
public class SomeClass{public SomeClass(){//TODO:初始化一些字段}public SomeClass(string temp) : this(){//TODO:初始化另外一些字段}}
在這里,為什么要使用this構造器呢?這事還要從字段的初始化說起。
假設有這樣的一個類,在聲明字段的時候對字段進行了初始化。在客戶端,通過該類的2個構造函數創建對象實例。
class PRogram{static void Main(string[] args){SomeClass sc = new SomeClass();SomeClass sc1 = new SomeClass("jack");}}public class SomeClass{private int _age = 20;private string _name = "darren";public SomeClass(){}public SomeClass(string name){_name = name;}}
反編譯成IL代碼為:
可見,每次調用類的構造函數都會對_age和_name字段進行初始化。是否可以把這重復的部分放到一個公共的地方呢?答案是可以的,可以把字段的初始化工作交給一個無參構造函數。修改如下:
public class SomeClass{private int _age;
新聞熱點
疑難解答