C# 是純物件導向語言:所有程式碼必須封裝在類別/結構體內,不存在全域函式、全域變數。方法是類別的函式成員,負責執行計算、動作或副作用。
[attributes] [method-modifiers] 回傳型別 方法名稱 (參數列表) {
// 方法本體
}
| 修飾詞 | 說明 | 互斥組 |
|---|---|---|
| new | 遮蔽基類別同名方法 | — |
| public/protected/internal/private | 存取層級 | 單一 |
| static | 屬於類別,無 this | — |
| virtual | 允許衍生類別 override | A |
| override | 覆寫基類別 virtual/abstract 方法 | A |
| abstract | 無本體,強制衍生類別實作 | A |
| sealed | 禁止進一步 override | 需配合 override |
| extern | 外部實作 (如 P/Invoke) | — |
| async | 非同步方法 (C# 5+) | — |
| unsafe | 允許指標操作 | — |
互斥組 A:static/virtual/override/abstract 四者任兩兩互斥。
| 模式 | 關鍵字 | 特性 | 適用場景 |
|---|---|---|---|
| 值參數 | (無) | 複製值,原變數不受影響 | 預設,小型值型別、不可變參考型別 |
| 參考參數 | ref | 傳遞記憶體位址,可修改原變數 | 需修改呼叫端變數、大型結構體避免複製 |
| 輸出參數 | out | 不需初始化,方法必須指派值 | 多傳回值、TryParse 模式 |
| 參數陣列 | params | 可變數量引數,內部為陣列 | 參數個數不固定、便利呼叫 |
void M(int x) vs void M(long x) 呼叫 M(5) 會選 int 版本。operator + 等符號。operator ++(T x);二元運算子:operator +(T left, T right)。+ - ! ~ ++ -- true false * / % & | ^ << >> == != < > <= >=。= && || ?: new typeof sizeof is as。==/!=、</>、<=/>=、true/false 必須成對實作。
class Demo {
static int _staticData;
int _instanceData;
static void StaticMethod() {
_staticData = 1; // OK
// _instanceData = 1; // CS0120: 需物件參考
}
void InstanceMethod() {
_staticData = 1; // OK
_instanceData = 1; // OK
StaticMethod(); // OK
}
}
靜態方法可透過傳遞實例參考來存取非靜態成員 (如 static void Print(Window w) => Console.WriteLine(w.Title);)。
public int Add(int a, int b) => a + b;void M(int x = 10)。M(y: 5, x: 3)。ref int Find(int[] arr, int val)。