首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

參數傳遞藝術(上):按值/按引用本質、params、值類型傳遞機制

     編輯:關於.NET

參數是方法間資料交換的橋樑。本文從基礎概念切入,系統闡述 C# 參數傳遞的四大核心機制:按值、按引用 (ref/out)、參數陣列 (params)、泛型類型參數,並以值類型為例解構「按值傳遞」的記憶體行為。

基礎概念:形參 vs 實參

static void ShowString(string astr) { ... } // 形參
static void Main(string[] args) {
    string myStr = "Hello"; // 實參
    ShowString(myStr);
}
  • 型別、個數、順序必須對應
  • C# 不支援預設參數值 (C# 4.0 前),需用多載模擬

參數分類總覽

分類說明
泛型類型參數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 核心機制與最佳實踐。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved