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

C# static 關鍵字深度解析(二)

     編輯:關於C語言

靜態成員函數

在類別內宣告 static 方法時,實作處不需重複標註 static,因為它屬於宣告性關鍵字。靜態方法屬於類別層級,不依賴實例即可呼叫,僅能存取靜態成員,無法存取非靜態欄位。本質上它是帶有類別存取權限的全域函數。

class A
{
    private static void Func(int value); // 宣告
}

// 實作時不需 static
void A::Func(int value) { /* ... */ }
  • 靜態方法可被繼承與覆寫,但無法宣告為 virtual。

僅限單一編譯單元的全域變數

在 .cpp 檔案全域範圍加上 static:

static int g_value = 0;

此變數僅在該編譯單元內可見,其他 .cpp 無法存取。若多個檔案各自宣告同名靜態全域變數,它們是獨立的實體,互不干擾。

非靜態全域變數的風險

int g_value = 0; // 未加 static

這會導致連結時可能發生重複定義錯誤,或無法確定是否跨檔案共享。不建議直接使用,應明確指定連結屬性。

正確的跨檔案共享變數宣告

  1. 標頭檔(.h)中以 extern 宣告,不可初始化:
    extern int g_shared; // 僅宣告
    
  2. 任一實作檔(.cpp)中定義並初始化一次:
    int g_shared = 0; // 定義與初始化
    
  3. 所有包含該標頭檔的單元即可共享同一變數實體。

僅限單一編譯單元的全域函數

在 .cpp 中宣告 static void Func();,實作不需 static。此函數僅在本檔案可見,避免跨檔案同名衝突。切勿在標頭檔宣告 static 全域函數,否則每個包含該標頭的單元都會產生獨立副本,造成混淆。

最佳實踐總結

  • 需跨檔案共用:標頭檔 extern 宣告 + 單一 .cpp 定義。
  • 僅限單檔使用:.cpp 內加 static。
  • 標頭檔避免 static 全域實體,防止產生多份獨立副本。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved