ICloneable问题

时间:2010-11-28 14:37:27

标签: c# .net icloneable

如果某个班级实施ICloneable,那意味着什么?

4 个答案:

答案 0 :(得分:6)

那是IClonable.Clone方法。文档说该方法旨在克隆对象。该文档特别指出克隆可以是深或浅。还要注意的是,结果类型必须与克隆的对象具有相同的类型,但在类型系统中无法保证它实际上是这样。

总结一下,它并没有提供太多的承诺,但目的是创建独立的克隆。

答案 1 :(得分:0)

基本上,它只允许克隆类:

http://msdn.microsoft.com/en-us/library/system.icloneable.aspx

实现任何接口时,您需要在该接口中定义方法。在这种情况下,需要在您的类中定义Clone方法。

Microsoft的示例:

public object Clone()
{
    return this.MemberwiseClone();
}

答案 2 :(得分:0)

这只意味着该类必须实现一个返回一个对象的方法Clone,而不是更多。所以你可以有一个接受ICloneable的方法然后你可以克隆那个对象。

答案 3 :(得分:0)

ICloneable本身没有意义,但可能与其他约束结合使用(例如,可以提供参数必须是实现ICloneable的Foo)。因此,可以有Foo,CloneableFoo,AdvancedFoo和CloneableAdvancedFoo,允许支持克隆的Foo衍生物与不支持克隆的Foo衍生物区别开来,但也允许期望可克隆Foo的例程接受Foo的可克隆衍生物。

不幸的是,虽然使用IClonable和Foo约束传递的函数参数可以用作IClonable和Foo,但没有类型转换,就没有办法创建满足这些条件的字段,也没有办法对字段进行类型转换。对此的补救措施可能是创建一个ICloneable(Of T As ICloneable(Of T)),其中包含一个返回T的“Clone”方法,以及一个也返回T的“Self”方法(因此,一个字段持有“ ICloneable Of Foo“可以通过”Self“方法作为Foo访问。需要一点小心才能使这一切工作,但模式应该非常好。