引數修飾符ref,out ,params的區別

2022-03-25 18:51:00 字數 2223 閱讀 4279

c#中有三個關鍵字-ref,out ,params,可是這三個之間的區別你都明白了嗎?

那麼我們就來認識一下引數修飾符ref,out ,params吧,還有它們的區別。

第一: params

乙個可以讓方法(函式)的擁有可變引數的關鍵字。

原則:在方法宣告中的 params 關鍵字之後不允許任何其他引數,並且在方法宣告中只允許乙個 params 關鍵字。

示例(拷貝到vs2005中即可用,下面不再說明)

public

partial

class

form1 : form

public

static

void

useparams2(

params

object

list)

public

form1()

private

void

button1_click(

object

sender, eventargs e)

;useparams(myarray); 

//看也可以是容器類,可變吧:)}}

第二:  out

這是乙個引用傳遞l。

原則一:當乙個方法(函式)在使用out作為引數時,在方法中(函式)對out引數所做的任何更改都將反映在該變數中。

原則二:當希望方法返回多個值時,宣告 out 方法非常有用。使用 out 引數的方法仍然可以返回乙個值。乙個方法可以有乙個以上的 out 引數。

原則三:若要使用 out 引數,必須將引數作為 out 參數顯式傳遞到方法。out 引數的值不會傳遞到 out 引數。

原則四:不必初始化作為 out 引數傳遞的變數,因為out 引數在進入方法(函式)時後清空自己,使自己變成乙個乾淨的引數,也因為這個原因必須在方法返回之前為 out 引數賦值(只有位址沒有值的引數是不能被.net接受的)。

原則五:屬性不是變數,不能作為 out 引數傳遞。

原則六:如果兩個方法的宣告僅在 out 的使用方面不同,則會發生過載。不過,無法定義僅在 ref 和 out 方面不同的過載。例如,以下過載宣告是有效的:

class myclass

public void mymethod(out int i)

} 而以下過載宣告是無效的:

class myclass

public void mymethod(ref int i)

} 有關傳遞陣列的資訊,請參見使用 ref 和 out 傳遞陣列。

示例附後

第三:  ref

ref僅僅是乙個位址!!!

原則一:當乙個方法(函式)在使用ref作為引數時,在方法中(函式)對ref引數所做的任何更改都將反映在該變數中。

原則二:呼叫方法時,在方法中對引數所做的任何更改都將反映在該變數中。

原則三:若要使用 ref 引數,必須將引數作為 ref 參數顯式傳遞到方法。ref 引數的值可以被傳遞到 ref 引數。

原則四:ref引數傳遞的變數必須初始化,因為ref引數在進入方法(函式)時後還是它自己,它這個位址指向的還是原來的值,也因為這個原因ref引數也可以在使用它的方法內部不操作。

原則六:如果兩種方法的宣告僅在它們對 ref 的使用方面不同,則將出現過載。但是,無法定義僅在 ref 和 out 方面不同的過載。例如,以下過載宣告是有效的:

class myclass

public void mymethod(ref int i)

} 但以下過載宣告是無效的:

class myclass

public void mymethod(ref int i)

} 有關傳遞陣列的資訊,請參見使用 ref 和 out 傳遞陣列。

示例public

static

string

testout(

outstring

i)public

static

void

testref(

refstring

i)public

static

void

testnoref(

string

refi)

public

form1()

private

void

button1_click(

object

sender, eventargs e)

C ,,引數修飾符

函式內給引數賦值,不改變實際引數的值。即修改只在函式中,函式執行完就失去生命週期了。private void form1 load object sender,eventargs e public void mes string str 首先顯示函式內的列印資訊 可以看見str的資訊改變 函式內 隨...

引數的修飾符

引數的修飾符主要有 params,out ref 一 params 1.可變引數必須是一維陣列。2.所有的引數型別必須一致 3.可以傳0到多個,也可以直接傳陣列,不傳引數的時候 比如params int arr arr的length為0,arr並不是null.如果是多個,引數必須能做這個一維陣列的元...

修飾符 許可權修飾符

四種形式許可權修飾符的訪問情況 publicprotected不寫private 同乙個類中 四種都可以 同一包中的不同類 除了private剩下都可以 不同包下的子類 public protected 可以 不同包下的不同類 只有public可以 許可權修飾符 public protected 預...