首頁 > 後端開發 > C++ > C# 的靜態類別初始化順序是否保證是確定性的?

C# 的靜態類別初始化順序是否保證是確定性的?

Barbara Streisand
發布: 2025-01-04 15:07:40
原創
566 人瀏覽過

Is C#'s Static Class Initialization Order Guaranteed to Be Deterministic?

C# 中的靜態類別初始化順序是確定性的嗎?

在 C# 中,靜態類別在首次使用時進行初始化。然而,多個靜態類別之間的初始化順序並不總是顯而易見的。本文探討了 C# 中靜態類別初始化的確定性本質以及它如何影響程式碼的執行。

確定性初始化順序

靜態類別初始化的順序是受控制的透過以下規則:

  • 如果類別中存在靜態欄位初始值設定項,則它會在類別的靜態建構子中。
  • 如果類別中存在靜態建構函數,則當引用該類別的任何靜態成員或建立該類別的實例時,會觸發其執行。
  • 如果類別包含Main 方法,其靜態建構子在Main 之前執行

範例

考慮以下程式碼:

static class B
{
    public static int X = 7;
    static B() { Console.WriteLine("B.X = " + X); X = A.X; Console.WriteLine("B.X = " + X); }
}

static class A
{
    public static int X = B.X + 1;
    static A() { Console.WriteLine("A.X = " + X); }
}

static class Program
{
    static void Main()
    {
        Console.WriteLine("A = {0}, B = {1}", A.X, B.X);
    }
}
登入後複製

考慮以下程式碼:

A.X = 1
B.X = 7
B.X = 0
A = 1, B = 0
登入後複製
此程式碼說明了靜態類別初始化的確定性本質。當 Main 中引用 A.X 時,會執行其靜態建構子。 A.X 使用 B.X 進行初始化,從而觸發 B 的初始化。因此,程式碼的輸出總是:

結論

靜態類別初始化C# 中遵循明確定義的順序。理解這個順序對於編寫按預期運行的程式碼至關重要。透過遵守上述規則,開發人員可以確保其靜態類別正確且一致地初始化,即使在多個編譯和執行中也是如此。

以上是C# 的靜態類別初始化順序是否保證是確定性的?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板