【OOP】static參考變數欄位

/
0 Comments

紀錄一下同事提到的static參考變數欄位蠻容易搞混的情況。
程式碼如下:

void Main()
{
 test = new Obj1 { name = "tt" };
 test.Dump();
 
 var a = Call();
 a.Dump();
 
 a.name = "t2";
 a.Dump();
 
 //要點一
 test.Dump();
 
 a = null;
 a.Dump();
 
 //要點二
 test.Dump();
 
}

public Obj1 Call()
{
 return test;
}

public static Obj1 test;


public class Obj1
{
 public string name { get; set; }
}




主要容易搞混的點分別在程式碼上標示出來了,兩個要點:
要點一
要點一輸出結果test.name會是"t2",用Call()方法呼叫傳回的test物件在記憶體中的Heap會是同一個object這沒問題,當a.name ="t2"就將這個object改變了。

要點二
要點二要能確實判斷出它的結果,關鍵在a=null時,要知道a其實是Steak中的位址而已,只是把a這個位址指向object的關聯給斷了,並非object本身被指定為null了,因此test並不會是null。


You may also like

沒有留言: