方法又稱成員函式,集中體現類別或物件行為。分靜態方法(僅操作靜態欄位)與實例方法(可操作實例與靜態欄位,後者不推薦但特殊情況有用)。具五種存取修飾詞:public、protected、internal、protected internal、private。
| 類型 | 修飾詞 | 行為 |
|---|---|---|
| 傳值 | 無 | 傳遞參數副本,方法內修改不影響原值 |
| 傳址 | ref | 傳遞記憶體位址,方法內修改影響原值 |
| 輸出 | out | 不需初始化,方法內必須指派值 |
| 陣列 | params | 傳遞可變數量參數陣列 |
using System;
class Test
{
static void Swap(ref int x, ref int y) { int t=x; x=y; y=t; }
static void Swap(int x, int y) { int t=x; x=y; y=t; }
static void Main()
{
int i=1, j=2;
Swap(ref i, ref j);
Console.WriteLine("i={0}, j={1}", i, j); // 2, 1
Swap(i, j);
Console.WriteLine("i={0}, j={1}", i, j); // 2, 1 (未改變)
}
}
傳址參數呼叫時宣告與調用皆需加 ref。
「傳值不改變參數值」在某些情況下錯誤。參考型別傳值時,修改其欄位會影響原物件:
class Element { public int Number = 10; }
static void Change(Element s) { s.Number = 100; }
// 輸出:10 -> 100