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

C# 方法參數四大類型深度解析:值、ref、out、params

     編輯:關於C#

前言

C# 方法參數分為四種模式,理解其語意差異對寫出正確、高效的程式碼至關重要。本文逐一解析並附實戰範例。

四大參數類型對照表

類型修飾詞傳遞機制初始化要求典型用途
值參數(無)複製值,方法內修改不影響原變數呼叫前必須已初始化單向輸入、不可變資料
參考參數ref傳遞記憶體位址,直接操作原變數呼叫前必須已初始化雙向傳遞、修改呼叫端變數
輸出參數out同 ref,但語意為「只輸出」呼叫前不需初始化;方法內必須賦值多返回值、TryParse 模式
參數陣列params可變長度參數清單,內部為陣列可傳 0~N 個引數或陣列參數個數不固定的方法

程式碼範例

using System;

class Test
{
    // params 範例
    static void F(params int[] args)
    {
        Console.WriteLine("Array contains {0} elements:", args.Length);
        foreach (int i in args) Console.Write("{0} ", i);
        Console.WriteLine();
    }

    // ref 範例
    static void Swap(ref int a, ref int b)
    {
        int t = a; a = b; b = t;
    }

    // out 範例
    static bool TryParseInt(string s, out int result)
    {
        return int.TryParse(s, out result);
    }

    public static void Main()
    {
        // params 呼叫三種形式
        int[] a = { 1, 2, 3 };
        F(a);           // 傳陣列
        F(10, 20, 30, 40); // 傳參數清單
        F();            // 零參數

        // ref 實測
        int x = 1, y = 2;
        Swap(ref x, ref y); // x=2, y=1

        // out 實測
        int val;
        if (TryParseInt("123", out val)) Console.WriteLine(val); // 123
    }
}

進階補充

  • params 僅能出現在參數列表最後一個位置,且每個方法最多一個。
  • ref/out 在 CLR 簽章中相同,僅中繼資料不同,編譯器強制區分語意。
  • C# 7.0+ 支援 ref return、ref struct 等進階功能,擴展高效能場景應用。

小結

依需求選擇:單向輸入用值參數,需修改呼叫端變數用 ref,純輸出用 out,參數個數可變用 params。掌握語意差異,避免誤用導致 Bug。

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