Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to Attach the Events of an Original Object to a Deep Copied Clone

Following up on my question yesterday to deepcopy an object with events in C# and attach the events of the original object to the Cloned copy is pretty easy, you just set the Event declaration in the Copy = the value in the original. Deep Clone when events are attached

How do you do this in VB.Net? (Using .Net 2)

I was hoping maybe there was something with reflection where you can examine what events are bound and somehow transfer those to the new object.

like image 821
Paul Farry Avatar asked Oct 27 '10 23:10

Paul Farry


1 Answers

yes you can, and its not that difficult, but it seems there isint a whole lot of info on this, so great question.


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

like image 148
jasper Avatar answered Sep 28 '22 07:09

jasper