c#正確認識引用型別
阿新 • • 發佈:2018-11-02
static void Main(string[] args) { Console.ReadKey(); List<string> list = new List<string>(); list.Add("1"); Console.WriteLine("list----list數量" + list.Count); buidList(list); Console.WriteLine("list----list數量" + list.Count); Console.ReadKey(); } static void buidList(List<string> list) { var list2 = new List<string>(); list2.Add("121"); list2.Add("1221"); list2.Add("1221"); list = list2; }
如上圖,這一段程式碼輸出 1,1 而不是 1,3
Debug的時候又發現 buildList的值確實變成了3個。
發現引用型別的指標在方法的傳遞中修改是無效的。
引用型別,傳遞的是記憶體的地址,如果在builList修改該變數list的值,例如list.add("1"),這是可以的,因為voidmain和buildllistlist是一個同一地址。
but
在buildList我們建立了一個新的list2,並指向list,這種並沒有改變list本身指向記憶體的內容,只是在 buildList 作用域中改變了 list的指向,而我們的main函式中的list的指向是另一個地址,所以這種操作並沒有改變list本身的值。
當然在main函式中重新list=new list();是可以的。
總結,引用地址是一個只在當前作用域有效,在下級作用域和上級作用域改變不隨之改變。