2011-06-20 69 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#中的对象总是通过引用,这意味着只要你访问这个对象,它就会永远是对象的同一个实例。这听起来像你可能想要做的是先克隆它,然后修改克隆。这对共享内存多线程环境也很重要,比如你上面提到的。

此外,您可能会考虑制作缓存结构的对象,只要您先解开它,该结构将通过值而不是通过引用传递。一般来说,你不想编辑线程共享的对象。