2010-10-27 14 views
5

कल मेरे प्रश्न के बाद सी # में घटनाओं के साथ एक वस्तु को गहराई से जोड़ने और क्लोन प्रतिलिपि में मूल ऑब्जेक्ट की घटनाओं को संलग्न करना बहुत आसान है, आप बस सेट करें कॉपी = मूल में मूल्य में घटना घोषणा। Deep Clone when events are attachedएक गहरी प्रतिलिपि क्लोन के लिए मूल वस्तु की घटनाओं को कैसे संलग्न करें

आप इसे VB.Net में कैसे करते हैं? (.Net 2 का उपयोग करना)

मुझे उम्मीद थी कि शायद प्रतिबिंब के साथ कुछ ऐसा था जहां आप जांच सकते हैं कि कौन सी घटनाएं बाध्य हैं और किसी भी तरह उन्हें नई वस्तु में स्थानांतरित करें।

उत्तर

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

क्या आप जानते हैं कि यह asp.net के साथ काम करता है या नहीं? मुझे GetField ("SomeEvent") के साथ कोई भाग्य नहीं मिला है, यह हमेशा कुछ भी नहीं देता है। – mrmillsy

+0

मेरा मानना ​​है कि यह ALMOST कोड के पीछे एएसपीनेट के साथ काम करता है। चूंकि कोड-बैक आंशिक वर्ग को अंतिम आउटपुट पेज में विरासत में मिला है, इसलिए आपको 'Me.GetType.BaseType' को कॉल करने की आवश्यकता है। शायद यह टिप्पणी किसी के लिए उपयोगी होगी। – mrmillsy

संबंधित मुद्दे