ele*_*tor 4 delphi design-patterns delphi-2007 prototype-pattern
我想知道,Delphi的RTTI中是否有与MemberwiseClone在C#中执行相同操作的原型模式的简单实现.我看到了这个模式的一些Delphi实现,其中正在创建一个新对象(TMyObject.Create),并且它的属性使用原型对象的值进行分配.我可能错了,但是如果我们以相同的基本方式创建对象,我看不到模式的好处.
谢谢.
Object.MemberwiseClone Method按照一些非常简单的规则生成对象的浅表副本,并利用.NET垃圾收集器的工作方式.
object.关于值类型的部分可以使用Delphi轻松复制.使用Delphi复制引用类型行为虽然技术上很简单,但不会提供预期的结果:Delphi代码应该是.free它创建的对象,它使用owner-owned范例来确保发生这种情况.通常的模式是释放由析构函数中的owner-object创建的对象.如果您制作对象的shalow副本,则会导致失败.这是一个例子:
A.Free;B.Free;- 这会自动调用B.Free,但不幸的是当我们释放A时B已经被释放了!deep-copy正如大卫所说,我们可以尝试一下,但这会带来一些同样困难的问题:
Application吗?把这一切放在一起我们只能得出一个结论:我们不能有一个通用的目的,相当于Delphi MemberwiseClone.对于具有简单交互的简单对象,我们可以有类似的外观,但这并不是那么有吸引力!
内置任何内容都不会为您执行深度克隆.我相信你可以根据新的RTTI写一个深度克隆,但我希望它是一项非常重要的工作.
如果您处理的是足够简单的类型,它可以正常工作,但您很容易遇到严峻的挑战.例如,在我的头顶:
您可以通过定义一个Clone()将RTTI用于简单类型的基本方法来实现原型模式,然后您必须覆盖它以获得更复杂的东西.就个人而言,我会继承TPersistent并制作我的Clone()方法Assign.