.net iClonable Vs强类型函数Vs懒惰

.net iClonable Vs强类型函数Vs懒惰,.net,icloneable,.net,Icloneable,大家好,我需要深度克隆一些引用其他自定义对象的自定义对象,这些对象可能引用其他客户。。。等等,你就知道了 我目前正处于文档和构思阶段,所以不想把它做好 问题1。当您可以编写一个返回正确克隆对象类型的强类型自定义函数时,为什么要实现ICloneable并返回一个对象 问题2。对象不是很大,我不介意做最初的繁重工作,复制每个元素,但由于懒惰,我可以克隆对象,然后再次为引用的成员添加特定的代码。这将需要强制转换,那么在cpu周期方面,什么更有效呢 欢迎任何想法、意见和想法。请参阅不实施iClonabl

大家好,我需要深度克隆一些引用其他自定义对象的自定义对象,这些对象可能引用其他客户。。。等等,你就知道了

我目前正处于文档和构思阶段,所以不想把它做好

问题1。当您可以编写一个返回正确克隆对象类型的强类型自定义函数时,为什么要实现ICloneable并返回一个对象

问题2。对象不是很大,我不介意做最初的繁重工作,复制每个元素,但由于懒惰,我可以克隆对象,然后再次为引用的成员添加特定的代码。这将需要强制转换,那么在cpu周期方面,什么更有效呢


欢迎任何想法、意见和想法。

请参阅不实施iClonable的原因;基本上,您可以定义自己的(强类型)接口并使用它,只要它正确地记录了它创建的深度副本,我看不出有任何问题。

接口的目的是允许人们对支持接口的对象进行操作,而不必担心对象实际上是什么。如果不知道iClonable.Clone在任何给定对象上实际上要做什么,仅仅知道对象支持iClonable是毫无用处的

对于集合类型来说,有一个受保护的BaseClone方法是很有用的,对于它们来说,有一个将其公开的派生类型(这样做可以从集合中派生可克隆和不可克隆的类型)。拥有类似Dictionary的支持克隆方法比包含复制构造函数要好,因为复制构造函数的参数可以是从Dictionary派生的类型,但在内部有很大的不同


要使克隆接口有用,它必须包含一个属性,项目可以通过该属性说出他们对克隆的感受(例如,-1-类型是不可变的,不需要克隆;-2-克隆类型可能会破坏它;-3-类型支持克隆),并指定DeepClone操作将检查所有对象以确保它们不介意被克隆,如果是这种情况,它将克隆所有嵌套的可变对象。不幸的是,框架中没有类似的东西。

如果一组派生类型包括可克隆和不可克隆的版本,则具有指示对象可克隆的接口可能很有用。如果某一类型的衍生产品可能无法支持克隆,则应保护该类型的克隆方法;该类型的可克隆版本应派生自它,但其他类型应派生自不可克隆版本

例如,可以有一个类型小部件,其派生类型包括CloneableWidget和SuperWidget(不可克隆)。SuperWidget可以有一个派生类型CloneableSuperWidget(以及其他一些如果被克隆就会中断的类型)。如果希望能够使用Widget类型的所有可克隆衍生工具,那么必须检查对象是否来自Widget,以及对象是否可克隆。将iClonable添加到可克隆的衍生物中可以让人检查这样一个对象