基於params,ref,out的引數問題詳解

2022-09-26 09:21:09 字數 1444 閱讀 9831

最近在寫程式時遇到params,ref,out 引數問題。回頭有自習看了看msdn,才鞏固了基礎。現在和大家分享一下。

params

params 關鍵字在方法成員的引數列表中使用,為該方法提供了引數個數可變的能力,它在只能出現一次並且不能在其後再有引數定義(之前可以)。

示例:複製** **如下:

using system;

using system.collections.generic;

using system.text;

namespace consoleapplication1

}static void main()

);console.readline();}}

}ref

ref 關鍵字使引數按引用傳遞。其效果是,當控制權傳遞**用方法時,在方法中對引數所做的任何更改都將反映在該變數中。

1.若要使用 ref 引數,則方法定義和呼叫方法都必須顯式使用 ref 關鍵字。

2.傳遞到 ref 引數的引數必須最先初始化。這與 out 不同,out 的引數在傳遞之前不需要顯式初始化。

3.屬性不是變數,因此不能作為 ref 引數傳遞。

4.儘管 ref 和 out 在執行時的處理方式不同,但它們在編譯時的處理方式是相同的。因此,如果乙個方法採用 ref 引數,而另乙個方法採用 out 引數,則無法過載這兩個方法。例如,從編譯的角度來看,以下**中的兩個方法是完全相同的。如果嘗試這麼做,將導致不能編譯該**。

5.如果乙個方法採用 ref 或 out 引數,而另乙個方法不採用這兩類引數,則可以進行過載。

示例:按引用傳遞值型別是有用的,但是 ref 對於傳遞引用型別也是很有用的。這允許被呼叫的方法修改該引用所引用的物件,因為引用本身是按引用來傳遞的。

複製** **如下:

using system;

class app

", i);

}static void main()

&nb  ", i);

useref(ref i);

// 檢視呼叫方法之後的值

console.writeline("after the method calling: i = ", i);

console.read();

}}out

out 關鍵字會導致引數通過引用來傳遞。這與 ref 關鍵字類似。

與 ref 的不同之處:

1.ref 要求變數必須在傳遞之前進行初始化。

2.儘管作為 out 引數傳遞的變數不需要在傳遞之前進行初始化,但需要呼叫方法以便在方法返回之前賦值。

示例:與 rewww.cppcns.comf 示例不同的地方只要將 ref 改為 out,然後變數 i 僅需要宣告即可。

複製** **如下:

static void main()

本文標題: 基於params,ref,out的引數問題詳解

本文位址:

C 的方法引數 Params,Ref,Out

c 的方法引數 c 的方法引數有三個 1.params 2.ref 3.out params 方法引數 在引數數目可變的引數用的。注意 用 params 方法引數的方法中,只允許出現乙個引數。eg using system public class myclass console.writeline...

引數傳遞及關鍵字params,ref,out的使用

using system namespace parameterpass b a,b 傳值操作,並不改變a,b的值 console.writeline 呼叫傳值函式後 a b n a,b console.writeline 呼叫傳引用函式前 a b a,b 傳引用操作,在此必須明確寫出ref關鍵字 ...

c 中引數關鍵字params ref out

params 指定在引數數目可變處採用引數的方法引數 它後面不允許任何其它引數,並且只允許有乙個params引數。params cs params.cs using system public class myclass console.writeline public static void us...