为什么要使用Clone()?

时间:2011-03-26 15:45:24

标签: c# language-features

在C#中使用Clone()的主要目的是什么?

使用它有什么好处?

3 个答案:

答案 0 :(得分:16)

这个想法是使用Clone你可以创建一个与你调用它的类型相同的新对象,,而不知道你正在调用它的对象的确切类型

例如:

void Test(ICloneable original)
{
    var cloned = original.Clone();
}

此处clonedoriginal具有相同的运行时类型,您无需知道执行克隆的类型。

然而ICloneable的用处几乎没有,因为它没有定义克隆操作的语义:它是shallow copy还是{{3} }?由于界面不强制执行其中一个,您无法真正知道自己要回来的内容。因为知道这是必要的,因为你需要相应地处理克隆,ICloneable本身就是一张烧焦的卡。

使用Clone方法(具有明确定义的语义)定义自己的接口非常有意义。

更新另请参阅:deep copy

答案 1 :(得分:3)

Clone()通常提供对象的副本(即参见Array.Clone()),它复制引用但不复制引用的对象。

如果您了解它的局限性,那将是很方便的,主要是实际被复制到新对象中的语义主要留给Clone()方法的实现者,因为接口{定义the Clone()方法的{3}}未明确指定(因此它可能是浅拷贝或深拷贝,但您不能依赖它们。)

答案 2 :(得分:0)

当我们将一个对象的内容复制到另一个(SomeClass obj2 = obj1)时,obj2也属于同一个类,修改obj2的内容也会修改obj1的内容。这是因为它们是引用类型。使用Clone()(以适当的方式)可以避免这种情况。在修改克隆对象时,原始文件不会被修改。