有个Class名字是className.
className A=new className();
A.Number1=0;
A.Number2=1;
className B=new className();
B=A;
A.Dispose();
当执行A.Dispose();的时候,B也消失了,为什么?
我想把A的一个副本赋值给B,在A消失一段时间之后直接拿B来用,当做缓存。为什么这种方式不行呀?应该怎么处理呀?

解决方案 »

  1.   

    类是引用类型,将A赋给B不是创建了一个新的版本,而是建立了一个引用,A,B指向的是内存中的同一个对象。
      

  2.   

    看问题lz应该是没搞清楚值类型与引用类型的区别。代码中lz声明了两个对象A B,A和B实际上不是储存着这两个实例对象,而是储存着那两个对象他们的“地址"。当代码执行到"B=A"时,A的值赋予了B,这时候A,B的值相同,也就是指向同一个对象了。这时候你把A dispose了,也就是把B disopose了。lz想令A消失的话把null赋给它就行了,不用dispose他。那么你的目的就达到了。
      

  3.   


    1. className A=new className();
    A.Number1=0;
    A.Number2=1;
    className B=new className();
    B.Number1 = A.Number1;
    B.Number2 = A.Number2;A.Dispose();2.className实现ICloneable接口
    参考
    http://www.csharp411.com/c-object-clone-wars/
      

  4.   

    c#下class是引用类型。无法分配栈内存的对象。对象都在堆中。所以你即便
    B=A;
    也不过是让B指向A的对象,让B原本的对象没有了引用等待垃圾回收。
    如果要实现复制,你可以参考5楼的实现ICloneable接口,或是写成struct