理解靜態方法與實例方法的差異是 .NET 開發基礎。本文透過簡潔範例說明兩者的定義、呼叫方式與適用場景。
屬於類別本身,不需建立實例即可呼叫。使用 static 關鍵字修飾。
public class SqlHelper
{
public static string GetGreeting()
{
return "你好";
}
}
string msg = SqlHelper.GetGreeting(); // 類別名.方法名
屬於類別的實例,必須先使用 new 建立物件,再透過實例呼叫。
public class SqlHelper
{
public string GetGreeting()
{
return "你好";
}
}
SqlHelper helper = new SqlHelper();
string msg = helper.GetGreeting(); // 實例.方法名
| 特性 | 靜態方法 | 實例方法 |
|---|---|---|
| 所屬對象 | 類別 | 實例 |
| 呼叫語法 | ClassName.Method() | instance.Method() |
| 存取成員 | 僅能存取靜態成員 | 可存取靜態與實例成員 |
this 關鍵字 | 不可用 | 可用,指向目前實例 |
| 記憶體 | 單一份程式碼,無實例開銷 | 每個實例擁有方法表指標 |
| 多執行緒安全 | 需自行處理共享狀態同步 | 各實例狀態隔離,相對安全 |
| 典型用途 | 工具函式、輔助類別、無狀態邏輯 | 領域模型、需維護狀態的物件 |
Math.Max、String.IsNullOrEmpty)。C# 允許為現有型別(含介面)新增「類似實例方法」的靜態方法:
public static class StringExtensions
{
public static bool IsNullOrEmpty(this string str)
{
return string.IsNullOrEmpty(str);
}
}
// 呼叫如同實例方法
string s = null;
bool empty = s.IsNullOrEmpty();
編譯器會將其轉為靜態方法呼叫,提供流暢 API 體驗。