參數是方法間資料交換的橋樑。本文從基礎概念切入,系統闡述 C# 參數傳遞的四大核心機制:按值、按引用 (ref/out)、參數陣列 (params)、泛型類型參數,並以值類型為例解構「按值傳遞」的記憶體行為。
static void ShowString(string astr) { ... } // 形參
static void Main(string[] args) {
string myStr = "Hello"; // 實參
ShowString(myStr);
}
| 分類 | 說明 |
|---|---|
| 泛型類型參數 | MyClass<T> 中的 T,運行期替換為實際類型 |
可變參數 params | 編譯器自動封裝為陣列,[ParamArrayAttribute] 標記 |
| 值參數 (預設) | 按值傳遞,值類型複製實例,引用類型複製引用 |
參考參數 ref/out | 按引用傳遞,傳遞變數位址 |
params 實現原理static void ShowAgeSum(string team, params int[] ages) { ... }
// 等同於
static void ShowAgeSum(string team, [ParamArrayAttribute] int[] ages) { ... }
編譯器處理邏輯:優先匹配無 params 的多載;無匹配時將實參打包成陣列傳入。限制:一維陣列、最後參數、唯一。
static void Add(int i) { i += 10; Console.WriteLine(i); } // 20
static void Main() {
int a = 10;
Add(a);
Console.WriteLine(a); // 10 - 原值不變
}
記憶體圖解:
a 在堆疊配置Add 時,參數 i 在新堆疊框架配置,複製 a 的值i 修改不影響 a下集將詳細剖析引用類型按值/按引用的差異、string 特殊行為成因、ref/out 核心機制與最佳實踐。