前幾日在看到一篇關於 ref 的帖子,想起以往一些同事工作中的錯誤,特作如下筆記。
其實這個問題很容易理解,首先在c#中傳遞方法引數預設是「值拷貝」模式,也就是說對於值型別(valuetype)變數直接拷貝乙份,而對於引用型別則拷貝乙個指向同一物件的引用副本傳遞給方法,因此即使不使用ref關鍵字,我們也可以在方法內部改變該引用所指向物件的內部狀態,但是某些時候我們需要在方法內部建立乙個新的物件例項,並使得原有引用指向這個新的物件。那麼問題就來了,由於現在存在兩個引用,我們改變的只是傳遞到方法的引用副本,而該副本在超出方法作用域後既失去作用,而原有的引用依然指向原有物件。因此我們需要使用ref關鍵字,那麼傳遞給方法的不再是引用副本,而是引用本身。我們就可以改變原有引用物件例項了。
public class data
public class class1
public static void test2(data d)
public static void test3(ref data d)
public static void main(string args)
}
c 方法引數ref和out區別
c 方法引數ref和out區別 params 關鍵字可以指定採用數目可變的引數的 方法引數。可以傳送引數宣告中所指定型別的逗號分隔的引數列表或指定型別的引數陣列。還可以不傳送引數。在方法宣告中的 params 關鍵字之後不允許任何其他引數,並且在方法宣告中只允許乙個 params 關鍵字。class...
C 方法的out引數和ref引數詳解
當乙個方法有多個返回值且是不同型別時,我們可以利用方法的引數 out引數和ref引數。我們先來看看最簡單的引數傳遞 static void main string args public static intadd int a,int b 一看就知道返回結果是10,20,30 那麼再來看看方法的re...
C 方法引數 值型別 物件型別 ref
物件型引數 第乙個方法 ref引數 dictionarydic new dictionary dic.add 1,第乙個 private void changerefdic ref dictionarydic 呼叫之後,dic的 key.count 2 第二個方法 普通物件型的引數,但是沒有再new...