如何将原始对象的事件附加到深度复制克隆

时间:2010-10-27 23:11:04

标签: .net vb.net events

昨天继续我的问题,深入研究一个带有C#事件的对象,并将原始对象的事件附加到Cloned副本非常简单,只需在Copy =原始值中设置Event声明即可。 Deep Clone when events are attached

你如何在VB.Net中这样做? (使用.Net 2)

我希望也许有一些反射,你可以检查哪些事件被绑定,并以某种方式将它们转移到新对象。

1 个答案:

答案 0 :(得分:4)

是的,你可以,并没有那么困难,但似乎没有很多关于此的信息,这是一个很好的问题。


Dim sourceObject As New FooBar
Dim destObject As New FooBar

AddHandler sourceObject.SomeEvent, AddressOf myFunc


Dim miHandler As FieldInfo = GetType(FooBar).GetField("SomeEvent", BindingFlags.Static Or BindingFlags.NonPublic Or BindingFlags.Instance)
Dim sourceDelegate As [Delegate] = miHandler.GetValue(sourceObject)

Dim addDelegate As [Delegate] = sourceDelegate.GetInvocationList().First() ' if its multicast, then you'll need to copy the lot

AddHandler destObject.SomeEvent, addDelegate