靜態方法 (static) 屬於類別本身,不屬於任何實例。靜態方法只能存取靜態成員,無法直接存取實例欄位或實例方法。
class A
{
int x; // 實例欄位
static int y; // 靜態欄位
static int F()
{
x = 1; // 編譯錯誤:無法存取非靜態欄位
y = 2; // 正確:存取靜態欄位
return y;
}
}
x 複本,靜態方法無 this 指標,無法判斷操作哪個實例的 x。y 僅有一份,屬於類別,靜態方法可直接存取。A.F() (類別名.方法名),無需 new A()。this/base:因無實例上下文。Math.Sin、String.IsNullOrEmpty)// 錯誤:靜態方法嘗試存取實例欄位
static void SetX(int val) { x = val; }
// 修正 1:將欄位改為靜態
static int x;
// 修正 2:改為實例方法
void SetX(int val) { x = val; }
// 修正 3:傳入實例參數
static void SetX(A instance, int val) { instance.x = val; }
掌握「靜態屬類別、實例屬物件」原則,即可正確設計靜態與實例成員。