3

如果实现了一个类ICloneable,那是什么意思?

4

4 回答 4

6

那就是有IClonable.Clone办法。文档说该方法旨在克隆对象。该文档特别指出,克隆可以是深的也可以是浅的。还需要注意的是,生成的类型必须与克隆的对象的类型相同,但类型系统不能保证它实际上是这样的。

总而言之,它并没有提供太多硬性承诺,但其目的是创建独立的克隆。

于 2010-11-28T14:44:40.803 回答
0

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 访问)。需要一点小心才能使这一切正常工作,但模式应该非常好。

于 2010-11-30T17:31:47.413 回答
0

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

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

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

来自微软的例子:

public object Clone()
{
    return this.MemberwiseClone();
}
于 2010-11-28T14:40:35.393 回答
0

这只是意味着该类必须实现一个Clone返回对象的方法,仅此而已。因此,您可以有一个接受 ICloneable 的方法,然后您可以克隆该对象。

于 2010-11-28T14:42:20.413 回答