1. 程式人生 > >C#中值傳遞與引用傳遞的區別

C#中值傳遞與引用傳遞的區別

以值傳遞引數

當實參當作值來傳遞時,就產生了一個新的拷貝。

程式執行結果為:p=9,x=8;即X的值不會受P影響,給P賦一個新值並不會改變X的內容,因為P和X存在於記憶體中不同的位置。

同理,用傳值的方式傳遞一個引用型別物件時,只是複製這個物件本身,即複製其地址值,而不是它指代的物件。下面程式碼中Fo中看到的StringBuilder物件,就是在Main方法中例項化的那一個,只是有不同的引用指向它而已。

執行結果:test.

換句話說,sb和foSB是指向同一物件的不同引用變數。因為foSB是引用的拷貝,把它置為null並沒有把sb置為 null.

ref修飾符

當使用rel關鍵字時,表示是用引用的方式傳遞引數。實參和形參引用的都是同一個物件,改變其中一個的引用值,另一個也會改變。

 

執行結果:P=9;X=9  。  

如果在函式FO中改變P的值,則X的值也會隨之改變。

執行結果:P=11,X=11;

ref修飾符在寫函式和呼叫函式時都一定要出現。

ref修飾符主要應該於實現交換的方法中。

執行結果:World Hello

out修飾符

out修飾符與ref修飾符非常相似,除了以下兩點為:

一,在呼叫函式時不需要賦值。

二,在函式退出前必須賦值。

out修飾符通常用於需要從方法中獲取多個返回值的時候

執行結果:a=Steven,b=Francis