C#中值傳遞與引用傳遞的區別
阿新 • • 發佈:2019-01-02
以值傳遞引數
當實參當作值來傳遞時,就產生了一個新的拷貝。
程式執行結果為: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