如果某个班级实施ICloneable
,那意味着什么?
答案 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访问。需要一点小心才能使这一切工作,但模式应该非常好。