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 預...