有如下类结构:Class A()
{
    B b;  //class B
    C c;  //class C
}
现在想做类A的深拷贝,是不是要让类A、B、C 都继承 ICloneable 接口,并实现 
     public object Clone()
    {
        return this.MemberwiseClone();
    }??

解决方案 »

  1.   

    不需要让A实现ICloneable接口,然後在Clone方法中去new B,C就行了。
      

  2.   

    B和C实现Clone方法,A 的Clone方法里这样写public object Clone() 
        { 
            A a = this.MemberwiseClone();
            a.b = b.Clone();
            a.c = c.Clone();
            return a;
        }
      

  3.   

    如果new 了 B和C,还要写代码去将B,C中的数据赋值一遍? 如果B,C 中也含有其它CLASS呢
      

  4.   

     如果B,C 中也含有其它CLASS呢
      

  5.   

    类本身只要实现自己的CLONE方法即可,如果类中包含了其它类,如你的A类,就需要将其所有类成员CLONE一次。
      

  6.   


    确实使用序列化和反序列化也可以,但是如果成员中有字符涉及高代理项 Unicode 字符串,反序列的时候将会丢失
      

  7.   

    利用序列化来做.
     public static object DeepClone(object source)
            {
                if (source == null) 
                    return null;
                Object objectReturn = null;
                using (MemoryStream stream = new MemoryStream())
                {
                    try
                    {
                        BinaryFormatter formatter = new BinaryFormatter();
                        formatter.Serialize(stream, source);
                        stream.Position = 0;
                        objectReturn = formatter.Deserialize(stream);
                    }
                    catch (Exception e)
                    {
                        return null
                    }
                }
                return objectReturn;
            }前提是该类能被序列化.
      

  8.   

    帮楼上补全        public static object DeepClone(object source)
            {
                if (source == null) 
                    return null;            Object objectReturn = null;
                using (MemoryStream stream = new MemoryStream())
                {
                    BinaryFormatter formatter = new BinaryFormatter();
                    formatter.Serialize(stream,source);
                    stream.Seek(0, SeekOrigin.Begin);
                    objectReturn = formatter.Deserialize(stream);
                }
                return objectReturn;