首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

深入理解 C# ref 與 out 關鍵字(二):參考型別的傳遞語義陷阱

     編輯:關於C語言

參考型別傳遞的本質

方法接收參考型別參數時,取得的是「參考的副本」。預設情況下,方法可修改物件內容,但無法變更呼叫端變數指向的物件實例。

ref 改變遊戲規則

加上 ref 後,方法拿到的是「變數儲存位置的位址」(即雙重指標),可直接替換呼叫端變數指向的物件,甚至設為 null。

記憶體圖解:陣列變數位址 2000 存放陣列物件位址 10000

  • 無 ref:方法獲得位址 10000 的副本,修改陣列元素影響原物件,但 array = new int[]{...} 僅改變區域變數
  • 有 ref:方法獲得位址 2000,array = new int[]{...} 會修改呼叫端變數指向,原陣列可能被 GC 回收

實戰驗證程式碼

void FirstDouble(int[] arr) { // 無 ref
    for (int i=0;i

執行結果證明:SecondDouble 呼叫後,呼叫端陣列變數指向新陣列 {11,12,13},原陣列與副本變數不再相同。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved