举例如下
data0001 info1 =new data0001();//new第一个数据层对象
info1.id=1;//测试赋值为1
data0001 info2=new data0001();//new第二个数据层对象
info2=info1;//将对象1赋给对像2
info2.id+=1;//改变对象2的值
Response.Write(info2.id.ToString());//结果=2。
Response.Write(info1.id.ToString());//结果也为2了。
我想得到的结果是info1.id仍为1,应该不变才对。 

解决方案 »

  1.   

    楼主什么意思?对象赋值,info2=info1;已经将info2的指向的地址修改为info1的内存单元,之后进行info2.id+=1;操作info1里单元的内容+1了,之后楼主输出当然是2了是1就不对了
      

  2.   

    info2=info1.Clone();//将对象1赋给2
      

  3.   

    正解
    info2=info1;是将内存单元地址...
      

  4.   

    正什么解?哪儿来的Clone方法?深拷贝必须自己实现....NET Framework类库对象也只有一部分实现了Clone方法,而且也不全是深拷贝...如Hashtable的Clone方法就是浅表复制...
      

  5.   

    是啊。Clone方法必须自动实现 .
    现在的问题就是,必须要把info1里的所有字段赋给info2,我知道info2.id=info1.id;就达到info1.id=1; 但info1里面有70多个字段啊,代码都要写一大堆啊,有没有办法一次性赋给info2呢
      

  6.   

    这个不用深拷贝,所谓深拷贝是把一个对象内的值类型和其它的引用类型都拷贝,浅拷贝只是拷贝对象内的值类型,而楼主例子中的id为值类型,所以用浅拷贝就可以实现,即直接调用object.MemberwiseClone();
      

  7.   

    如果这些都是值类型的话,不用自己写class Product : ICloneable //: IEquatable<Product>
        {
    private String _name;        public Product(String name)
            {
                _name = name;
            }        public string Name
            {
                get { return _name; }
                set { _name = value; }
            }public object Clone()
            {
                return MemberwiseClone(); //调用基类的默认实现即可,它会用反射把当前对象内所有的值类型进行拷贝的
            }
    }Product product1 = new Product("abc");
                Product product2 = (Product) product1.Clone();
                product2.Name = "New Value";
                Console.WriteLine(product1.Name);
                Console.WriteLine(product2.Name);
      

  8.   

    问题已解决
     public class DATA0001Info : ICloneable //实现Clone接口
       {
            public object Clone()
            {
                return this.MemberwiseClone(); //返回浅clone方法
            } 
        }
      

  9.   

    你写到info2=info1;的时候就应该知道,原来的info2(所指向的对象)这时候就成了垃圾只能等着GC清理它了。这才是.net。