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

C# 靜態建構函數、靜態欄位與執行順序深度解析

     編輯:關於C語言

靜態建構函數特性

  • 用於初始化靜態欄位、readonly 欄位
  • static 關鍵字,無存取修飾詞 (隱含 private)
  • 每個應用程式域僅執行一次:首次建立實例或存取靜態成員時觸發
  • 不可繼承、不可直接呼叫
  • 含 Main 的類別,靜態建構函數在 Main 前執行
  • 有欄位初始化器時,按文字順序先執行初始化器,再執行靜態建構函數本體
  • 未寫靜態建構函數但有欄位初始化器 → 編譯器自動產生預設靜態建構函數

經典執行順序範例

class A { public static int X; static A() { X = B.Y + 1; } } // ④
class B { public static int Y = A.X + 1; static B() { } } // ②③
// Main 在 B → ①
// 執行順序:① Main 觸發 B 靜態建構 → ② B.Y 初始化器需 A.X → ③ 觸發 A 靜態建構 → ④ A.X = B.Y+1 → 返回 B 靜態建構 → ⑤ Main 繼續
// 結果:X=1, Y=2

完整可執行驗證碼

using System;
class A { public static int X; static A() { X = B.Y + 1; Console.WriteLine("static A()"); } }
class B { public static int Y = A.X + 1; static B() { Console.WriteLine("static B()"); } static void Main() { Console.WriteLine($"X={A.X}, Y={B.Y}"); Console.ReadLine(); } }

輸出:

static B()
static A()
X=1, Y=2

掌握靜態初始化順序,避免循環相依導致邏輯錯誤。

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