1. 程式人生 > >c#正確認識引用型別

c#正確認識引用型別

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();是可以的。

總結,引用地址是一個只在當前作用域有效,在下級作用域和上級作用域改變不隨之改變。