C#深拷贝的问题…… 我是新手一名,有个比较白痴的C#问题请教一下各位大神, 对类进行深拷贝的时候 是继承ICloneable接口 还是直接自己写个深拷贝的方法啊?各位编程的时候比较喜欢用哪种(集成接口并实现,或是自己写个方法)?……C#为啥把复制构造器弄没了………………深拷贝 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 继承接口跟实现有什么直接关系?如果你说“有个a,我想深拷贝给b”,这跟你用什么接口有什么关系?你继承了接口,不是还要自己写实现方法?跟“直接自己自机械一个深拷贝的方法”有矛盾吗?你听说过继承了某个接口就不用自己写方法了吗?.net的接口,不会继承任何代码。没听说过因为你给一个class声明它使用一个接口就继承了什么代码来的。 继承ICloneable接口也是要自己实现拷贝的 你的问题是为什么要继承ICloneable接口 自己写一个不是也可以是实现么 继承ICloneable接口或者IDisposable之类的是一些常用的接口 接口就是规范 假如组里有人要用你的类 如果你自己实现还要告诉人家你这个类里哪个方法是干什么用的 多麻烦 就像你说的 这些常用接口是约定俗成的东西 大家都知道,这样人家马上就知道你这个方法是干什么用的了 不用跑来跑去问来问去了偶是这么理解的... 我好像突然想明白了。如果 在某个类中,需要调用很多不同的类的 深拷贝功能,就可以继承这个借口,然后通过接口去访问方法,来减少重载的次数,反之,如果只是这个类自己用,而不需要通过接口去调用这个方法,就可以自己写一个 深拷贝的方法了 我说的对么?举个例子: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(); }}菜鸟一只例子不贴切 希望有人能看得懂吧 哦,对了 5L的帖子忘了对Clone方法返回的Object进行类型转换了…… 接口是要自己实现的 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); } } 关于LZ问的为啥一定要实现接口,而不是自己添加个Clone方法,楼上只是说了很表层的一部分。.NET之所以提供IDisposable以及IClonable这种看似没什么营养的接口,是有实际用处的,不仅仅是让你看着规范。其关键用处在于利用OOP的多态特性,实现统一相关操作,以提高互操作性。这是因为.NET Framework很大一部分内容是这个类库,其中一些就Dispose以及Clone相关。比如,using语句(不是名字空间那个)作为C#语法的一部分,要求参数必须是IDisposable类型。 如何更快完成软件开发 帮忙做个CRC校验 如何获取客户端MAC地址? 正则表达式 嵌套 WINFORM的combox如何绑定默认值? 读XML文档的时候,为什么根节点如果添加了属性,就无法正常查询 我下载的 Visual C#.net Express 版本怎么是繁体版啊 DataGrid 绑定下拉框模板列 winform 程序 用vs.net创建的Access连接是绝对路径,怎样改成相对路径? Visual C#.NET中的一个奇怪问题!!?? 如何获取当前播放的音乐并录制一部分 DevExprss控件如何实现效果
偶是这么理解的...
举个例子:
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();
}
}菜鸟一只例子不贴切 希望有人能看得懂吧
{
public Obj() { }
private Obj(Obj obj) { this.FuckU2 = obj.FuckU2; }
public bool FuckU2 { get; set; }
public object Clone()
{
return new Obj(this);
}
}