2010-10-27 12 views
5

Facendo seguito a mia domanda ieri per deepcopy un oggetto con eventi in C# e allegare gli eventi dell'oggetto originale alla copia clonata è abbastanza facile, è sufficiente impostare la dichiarazione di evento nella copia = il valore nell'originale. Deep Clone when events are attachedCome collegare gli eventi di un oggetto originale ad un profondo copiata Clone

Come fa a fare questo in VB.Net? (Utilizzando Net 2)

speravo forse c'era qualcosa con la riflessione in cui è possibile esaminare quali eventi sono legati e in qualche modo trasferire quelli per il nuovo oggetto.

risposta

4

sì è possibile, e non è poi così difficile, ma sembra che ci isint un sacco di informazioni, così grande domanda.

 

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 
 
+0

Sai se funziona con asp.net? Non ho avuto fortuna con .GetField ("SomeEvent"), restituisce sempre Nothing. – mrmillsy

+0

Credo che questo ALMOST funzioni con asp.net con code-behind. Poiché la classe parziale code-behind viene ereditata nella pagina di output finale, è necessario chiamare 'Me.GetType.BaseType'. Forse questo commento sarà utile per qualcuno. – mrmillsy

Problemi correlati