在 C# 物件導向程式設計中,理解「靜態成員」與「實例成員」的區別是掌握類別設計的基石。它們不僅決定了資料的儲存方式,更直接影響方法的呼叫邏輯與記憶體管理。本文將系統整理兩者的定義、訪問方式、相互呼叫限制及記憶體模型,幫助開發者建立清晰的概念框架。
類別名.靜態變數名(推薦),亦可透過實例訪問(但會產生編譯警告)。new 關鍵字建立實例時分配,隨垃圾回收器回收實例時釋放。實例名.實例變數名,必須先實例化物件。static 修飾,不屬於特定物件。this 參考。new 實例後透過該參考訪問。類別名.靜態方法名()。static 修飾,隸屬於特定物件實例。this 參考,指向呼叫該方法的當前物件。this 區分操作哪個物件的資料。這是「程式碼共享、資料隔離」的經典體現。| 維度 | 靜態成員 | 實例成員 |
|---|---|---|
| 所屬對象 | 類別 | 物件實例 |
| 記憶體份數 | 全程式域僅一份 | 每個實例一份 |
| 訪問前綴 | 類別名 | 實例名 |
| 能否訪問對方 | 只能訪靜態;需參數/實例化才能訪實例 | 雙向皆可直接訪問 |
| 典型應用場景 | 工具類、計數器、單例模式、常數定義 | 業務實體屬性、狀態相關邏輯 |
static,提升效能並明確語意。instance.StaticMember,但易誤導閱讀者以為是實例成員,統一使用 ClassName.StaticMember。掌握這兩者的邊界與交互規則,是寫出高內聚、低耦合、記憶體高效 C# 程式碼的關鍵一步。