代码之家  ›  专栏  ›  技术社区  ›  Paul Farry

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

  •  5
  • Paul Farry  · 技术社区  · 14 年前

    继我昨天的问题之后,深入复制一个C中包含事件的对象,并将原始对象的事件附加到克隆副本非常简单,您只需在副本中设置事件声明=原始副本中的值。 Deep Clone when events are attached

    我希望可能有反射的东西,你可以检查哪些事件是绑定的,并以某种方式将它们转移到新的对象。

    1 回复  |  直到 8 年前
        1
  •  4
  •   jasper johnz    14 年前

    是的,你可以,这并不难,但似乎有很多关于这方面的信息,所以伟大的问题。

    
    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
    
    
    推荐文章