理解 static 必須先認識 auto。我們日常宣告的區域變數預設皆為 auto(隱式),意指「由程式自動管理生命週期」:進入作用域時配置,離開時釋放。而 static 則打破此規則——變數在程式啟動時配置,直到程式結束才釋放,遵循程式生命週期而非區塊生命週期。
void Func()
{
int a; // auto int a; 每次呼叫重新配置
static int b; // 程式啟動時配置,全程唯一
}
多執行緒同時呼叫 Func() 時,各自擁有獨立的 a,但共享同一個 b,這在多執緒環境下需特別注意同步問題。
class A
{
private static int s_value; // 僅宣告
};
// 必須在 .cpp 中定義並初始化(無 static 修飾)
int A::s_value = 0;
main 前)即完成配置與建構,若為類別型別會呼叫其建構函式。A::s_value)。混淆 auto(預設)與 static 的語義,是導致資源洩漏、多執行緒競態、單例模式實作錯誤的常見根源。掌握兩者的生命週期差異,是撰寫健壯 C# 程式的基石。