建構函式與類別同名,無回傳型別(連 `void` 都不寫)。若類別未顯式宣告任何建構函式,編譯器自動產生預設無參建構函式(不執行任何動作)。一旦自訂任何建構函式,預設建構函式即消失。
public class Test {
public int Num;
public Test(int i) => Num = i + 5; // 運算式主體建構函式 (C# 7+)
static void Main() {
var obj = new Test(10); // 必須傳參
Console.WriteLine(obj.Num); // 15
// new Test(); // 編譯錯誤:找不到無參建構函式
}
}
public class Test {
static Test() => Console.WriteLine("www.gosoa.com.cn"); // 靜態建構函式
public Test() { } // 實例建構函式
static void Main() {
var obj = new Test(); // 輸出: www.gosoa.com.cn
}
}
使用 this(...) 語法呼叫同類別其他建構函式,在本建構函式本體執行前完成。
public class Test {
private string _domain, _url;
public Test(string dom, string url) { _domain = dom; _url = url; }
public Test(string dom) { _domain = dom; _url = "gosoa.com.cn"; } // 重複
}
public class Test {
private string _domain, _url;
public Test(string dom, string url) { _domain = dom; _url = url; }
public Test(string dom) : this(dom, "www.gosoa.com.cn") { } // 復用
}
public class Config {
public readonly string ConnectionString;
public readonly int MaxRetries;
public Config(string env) {
ConnectionString = env switch {
"Prod" => "Server=prod;...",
"Dev" => "Server=dev;...",
_ => throw new ArgumentException()
};
MaxRetries = Environment.ProcessorCount * 2; // 依硬體動態決定
}
}
精通建構函式多載、鏈結、靜態初始化時機與 `readonly` 語意,能寫出更安全、可維護、效能友善的 C# 類別。