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

C# static 關鍵字深度解析:無需實例化即可使用的靜態成員

     編輯:關於C++

static 基本含義

static 修飾類別或成員時,表示屬於類別本身,而非某個具體實例。靜態成員在記憶體中僅存在一份,存放於靜態儲存區,程式啟動時配置,結束時釋放。

三大使用場景

1. 靜態類別

  • 只能包含靜態成員
  • 不可實例化、不可繼承、無建構函式
  • 直接透過 類別名.成員 存取

2. 非靜態類別中的靜態成員

  • 類別可實例化,但靜態成員屬於類別,所有實例共享
  • 存取方式:類別名.靜態成員 或 實例.靜態成員(不推薦)

3. 方法內部靜態區域變數

  • 生命週期贯穿整個程式執行期間,不隨方法結束而銷毀
  • 多執行緒共享同一變數,需注意同步
  • 類似全域變數但作用域限制在方法內

程式碼範例

場景一:非靜態類別含靜態方法


public class ClassA {
    public static void Fun() { Console.WriteLine("Static Fun"); }
}
public class ClassB {
    public void Test() { ClassA.Fun(); } // 無需 new ClassA()
}

場景二:靜態類別


public static class ClassA {
    public static void Fun() { Console.WriteLine("Static Class Fun"); }
}
public class ClassB {
    public void Test() { ClassA.Fun(); }
}

生活化比喻

  • 人類 = 非靜態類別。每個人都是實例。
  • 「有大腦」 = 靜態屬性。全人類共享,不屬於某個人,不可實例化「一個大腦」。
  • 身高 = 非靜態屬性。每個人不同,屬於具體實例。

記憶體模型視角

區域存放內容
堆疊實質類型區域變數
堆積參考類型物件、陣列
靜態儲存區靜態變數、全域變數、常數

靜態變數在靜態儲存區,全程共用。例:銀行帳戶餘額為靜態變數,ATM、櫃台、網銀操作同一餘額。

總結

  • 工具類、常數、單例模式、快取、計數器 → 適合 static
  • 狀態隨實例變化的資料 → 必須用實例成員
  • 多執行緒環境下存取靜態可變資料 → 必須加鎖或用 Interlocked/Concurrent 類別
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved