Jon*_*Jon 16
这个想法是使用Clone你可以创建一个与你调用它的类型相同的新对象,而不知道你调用它的对象的确切类型.
例如:
void Test(ICloneable original)
{
var cloned = original.Clone();
}
Run Code Online (Sandbox Code Playgroud)
这cloned与运行时类型相同original,您不需要知道执行克隆的类型.
然而,它的用处ICloneable几乎没有,因为它没有定义克隆操作的语义:它是浅拷贝还是深拷贝?由于界面不强制执行其中一个,您无法真正知道自己要回来的内容.因为知道这是必不可少的,因为你需要相应地处理克隆,所以ICloneable它本身就是一张烧焦的卡片.
使用Clone方法定义自己的接口(具有明确定义的语义)非常有意义.
更新:另请参阅:我为什么要在c#中实现ICloneable?
Clone()通常提供对象的浅拷贝(例如,参见Array.Clone()),它复制引用但不复制被引用的对象。
如果您了解它的局限性,这会很方便,主要是实际复制到新对象中的语义主要留给Clone()方法的实现者,因为ICloneable定义Clone()方法的接口未指定(因此它可能是一个浅层复制或深复制,但你不能依赖任何一个)。
| 归档时间: |
|
| 查看次数: |
17465 次 |
| 最近记录: |