首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 進階核心(三):建構函式全面解析

     編輯:關於C#

建構函式基礎

建構函式與類別同名,無回傳型別(連 `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(); // 編譯錯誤:找不到無參建構函式
    }
}

靜態建構函式——類別初始化守門員

  • 語法:`static ClassName() { }`,無參數、無存取修飾詞。
  • 執行時機:建立第一個實例或存取第一個靜態成員之前,由 CLR 自動呼叫一次。
  • 用途:初始化靜態欄位、載入非託管資源、註冊相依性。
  • 與實例建構函式共存無衝突:靜態建構函式在類別載入階段執行,實例建構函式在物件建立時執行。

範例

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") { } // 復用
}

readonly 欄位——建構階段可寫、之後唯讀

  • 比 `const` 彈性:`const` 編譯期常數(必須宣告時初始化),`readonly` 執行期常數(可在建構函式計算後指派)。
  • 只能在宣告時或建構函式中指派,其他位置編譯錯誤。

範例

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# 類別。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved