// 靜態方法
public static void StaticMethod() { }
// 非靜態方法 (實例方法)
public void InstanceMethod() { }
| 比較項目 | 靜態方法 | 非靜態方法 |
|---|---|---|
| 所屬對象 | 類別本身 | 類別實例 |
| 呼叫方式 | ClassName.Method() | instance.Method() |
| 存取成員 | 僅限靜態成員 | 靜態 + 實例成員皆可 |
| this 關鍵字 | 不可用 | 可用 (指向當前實例) |
| 記憶體 | 單一程式碼區,共用 | 單一程式碼區,但透過 this 存取實例資料 |
| 繼承/多型 | 不可覆寫 (可隱藏 new) | 可 virtual/override 多型 |
| 效能 | 略快 (無 this 傳遞、易內聯) | 標準 |
實例成員 (欄位/屬性/方法) 存在於**每個物件實例**的記憶體中。靜態方法屬於類別,**沒有 this 指標**,執行時無法知道要操作哪一個實例的資料。靜態成員在類別載入時分配固定記憶體位址,故可直接存取。
// 靜態方法中
string name = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName;
// 非靜態方法中 (亦可用)
string name = this.GetType().FullName;
Math.Max, String.IsNullOrEmpty)。this T)。靜態方法確實略快 (避免 this 傳遞、JIT 更易內聯),但差異通常在**奈秒級**,**不應作為設計決策依據**。可維護性、可測試性、正確的物件導向設計優先於微小效能差異。