C# 中的靜態類別初始化順序是確定性的嗎?
C# 中靜態類別初始化的順序確實是確定性的。根據 ECMA-334 標準:
初始化順序範例
考慮以下代碼:
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 類和B 類,初始化的順序仍然保持不變,因為第一次使用A.X 會觸發初始化鏈。
結論
靜態類別初始化的順序是確定的,並遵循 ECMA-334 標準中概述的規則。第一次使用靜態成員或建立實例將觸發初始化過程,該過程按照欄位初始值設定項後跟靜態建構函數的順序進行。
以上是C# 的靜態類別初始化順序是可預測的嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!