我是新手一名,有个比较白痴的C#问题请教一下各位大神, 对类进行深拷贝的时候 是继承ICloneable接口 还是直接自己写个深拷贝的方法啊?各位编程的时候比较喜欢用哪种(集成接口并实现,或是自己写个方法)?……
C#为啥把复制构造器弄没了………………深拷贝

解决方案 »

  1.   

    继承接口跟实现有什么直接关系?如果你说“有个a,我想深拷贝给b”,这跟你用什么接口有什么关系?你继承了接口,不是还要自己写实现方法?跟“直接自己自机械一个深拷贝的方法”有矛盾吗?你听说过继承了某个接口就不用自己写方法了吗?.net的接口,不会继承任何代码。没听说过因为你给一个class声明它使用一个接口就继承了什么代码来的。
      

  2.   

    继承ICloneable接口也是要自己实现拷贝的  你的问题是为什么要继承ICloneable接口  自己写一个不是也可以是实现么   继承ICloneable接口或者IDisposable之类的是一些常用的接口  接口就是规范  假如组里有人要用你的类  如果你自己实现还要告诉人家你这个类里哪个方法是干什么用的  多麻烦   就像你说的 这些常用接口是约定俗成的东西  大家都知道,这样人家马上就知道你这个方法是干什么用的了  不用跑来跑去问来问去了
    偶是这么理解的...
      

  3.   

    我好像突然想明白了。如果 在某个类中,需要调用很多不同的类的 深拷贝功能,就可以继承这个借口,然后通过接口去访问方法,来减少重载的次数,反之,如果只是这个类自己用,而不需要通过接口去调用这个方法,就可以自己写一个 深拷贝的方法了 我说的对么?
    举个例子:
    class Class1:ICloneable
    {
        public object Clone(){................}
    }
    class Class2:ICloneable
    {
        public object Clone(){................}
    }
    class Class3:ICloneable
    {
        public object Clone(){................}
    }class Class//用于调用前边类中的复制功能
    {
         public void CloneClass(ICloneable iClone1,ICloneable iClone2)//省去多次重载的麻烦
         {
          iClone2=iClone1.Clone();
          }
    }菜鸟一只例子不贴切 希望有人能看得懂吧
      

  4.   

    哦,对了 5L的帖子忘了对Clone方法返回的Object进行类型转换了……
      

  5.   

    接口是要自己实现的        public class Obj : ICloneable
            {
                public Obj() { }
                private Obj(Obj obj) { this.FuckU2 = obj.FuckU2; }
                public bool FuckU2 { get; set; }
                public object Clone()
                {
                    return new Obj(this);
                }
            }
      

  6.   

    关于LZ问的为啥一定要实现接口,而不是自己添加个Clone方法,楼上只是说了很表层的一部分。.NET之所以提供IDisposable以及IClonable这种看似没什么营养的接口,是有实际用处的,不仅仅是让你看着规范。其关键用处在于利用OOP的多态特性,实现统一相关操作,以提高互操作性。这是因为.NET Framework很大一部分内容是这个类库,其中一些就Dispose以及Clone相关。比如,using语句(不是名字空间那个)作为C#语法的一部分,要求参数必须是IDisposable类型。