2009-10-01 77 views
1

我有一個對象的集合。當我在該集合上添加一些對象時。它會保存該對象本身還是保存其引用。列表<T>:馬歇爾通過價值或馬歇爾通過參考

List<Student> myList; 
Student std1 = new Student(); 
Student std2 = new Student(); 
myList.Add(std1); 
myList.Add(std2); 

myList將包含什麼? std1和std2的複製副本或這兩個對象的引用?

如果這個列表駐留在一些遠程位置我通過wcf服務訪問它。然後我在這個列表中添加對象。會發生什麼。這些對象將被添加MBVMBR

其實我有名單確定,我在這個列表中添加學生的對象..

去年

我說想我有一些方案,這是其他機器上名單。我可以使用WCF服務訪問該程序。通過WCF服務獲得該計劃的參考。然後我調用Program.myList.Add(student)。現在將在該遠程機器上生成一個副本,並將添加到myList或引用將被保存?

回答

2

您正在使用的List<Object>Object是引用類型,因此您的列表將保存對實例的引用。

我不確定你對最後一部分的意思,請你詳細說明一下。

+0

其實我已經列出確定,我在這個列表中添加學生的對象.. 在最後我說,假如我有一些方案,這是其他機器上名單。我可以使用WCF服務訪問該程序。通過WCF服務獲得該計劃的參考。然後我調用Program.myList.Add(student)。現在將在該遠程機器上生成一個副本,並將添加到myList或引用將被保存? – Mohsan

+0

不WCF序列化對象併發送它們? – Svish

+0

好的,學生是一個類還是一個結構?如果它是一個類,因此是一個引用類型,那麼你的列表仍然會保存引用。如果它是一個結構,你的列表將保存Student實例的值。 至於編組問題:MarshalByRefObject爲您提供了一個代理,並且框架將更新原始代碼。您沒有對原始文件進行實際參考。爲了獲得一份副本,您對此進行的更改不會反映在原始內容中。 –

0

由於Object類型是引用類型,因此示例中的List將存儲對作爲託管堆上的Student對象分配的對象的引用值。