如果实现了一个类ICloneable
,那是什么意思?
4 回答
那就是有IClonable.Clone
办法。文档说该方法旨在克隆对象。该文档特别指出,克隆可以是深的也可以是浅的。还需要注意的是,生成的类型必须与克隆的对象的类型相同,但类型系统不能保证它实际上是这样的。
总而言之,它并没有提供太多硬性承诺,但其目的是创建独立的克隆。
ICloneable 本身没有意义,但与其他约束结合使用可能很有用(例如,可以规定参数必须是实现 ICloneable 的 Foo)。因此,可以有一个 Foo、一个 CloneableFoo、一个 AdvancedFoo 和一个 CloneableAdvancedFoo,允许将支持克隆的 Foo 派生与不支持克隆的派生区分开来,但也允许期望可克隆 Foo 的例程接受 Foo 的可克隆派生。
不幸的是,虽然通过 IClonable 和 Foo 约束传递的函数参数可以用作 IClonable 和 Foo,但如果没有类型转换,则无法创建满足此类标准的字段,也无法对字段进行类型转换。对此的补救措施可能是创建一个 ICloneable(Of T As ICloneable(Of T)),它包含一个返回 T 的“Clone”方法和一个也返回 T 的“Self”方法(因此,一个包含“ ICloneable Of Foo”可以通过“Self”方法作为 Foo 访问)。需要一点小心才能使这一切正常工作,但模式应该非常好。
基本上,它只允许克隆类:
http://msdn.microsoft.com/en-us/library/system.icloneable.aspx
实现任何接口时,都需要在该接口中定义方法。在这种情况下,需要在您的类中定义 Clone 方法。
来自微软的例子:
public object Clone()
{
return this.MemberwiseClone();
}
这只是意味着该类必须实现一个Clone
返回对象的方法,仅此而已。因此,您可以有一个接受 ICloneable 的方法,然后您可以克隆该对象。