2011-06-20 65 views
0

我在應用程序緩存中保留一個全局對象,根據我的需要檢索和修改它。奇怪的是,一旦我修改了檢索的對象,應用程序對象也被修改了。我不想修改應用程序對象。當檢索對象被修改時,應用程序對象被修改

System.Web.HttpContext.Current.Application["obj2"]=obj2; 

object obj1 = System.Web.HttpContext.Current.Application["obj2"]; 

,當我修改OBJ1的OBJ 2是越來越修改過。你們可以爲我解決上述問題嗎?

+3

考慮在檢索對象時克隆對象。你在應用程序中存儲什麼樣的對象? –

+1

您正在應用程序緩存中存儲類的實例。將該實例分配給變量不會創建該實例的副本。它*是*實例。這是正確的和預期的行爲。 – Amy

+1

回到基礎:.NET中的引用vs值類型(http://www.albahari.com/valuevsreftypes.aspx)。 –

回答

2

C#中的對象總是通過引用,這意味着只要你訪問這個對象,它就會永遠是對象的同一個實例。這聽起來像你可能想要做的是先克隆它,然後修改克隆。這對共享內存多線程環境也很重要,比如你上面提到的。

此外,您可能會考慮製作緩存結構的對象,只要您先解開它,該結構將通過值而不是通過引用傳遞。一般來說,你不想編輯線程共享的對象。