2012-05-07 32 views
6

अगर मैं इस तरह की एक घटना है:क्या सी # में ईवेंट सदस्यता की सदस्यता लेना संभव है?

public delegate void MyEventHandler(object sender, EventArgs e); 
public event MyEventHandler MyEvent; 

और इस तरह एक eventhandler जोड़ता है:

MyEvent += MyEventHandlerMethod; 

... यह तो संभव है यह किसी भी तरह रजिस्टर करने के लिए?

MyEvent.OnSubscribe += MySubscriptionHandler; 

उत्तर

11

ऑटो-कार्यान्वित गुणों के समान, ईवेंट डिफ़ॉल्ट रूप से स्वत: कार्यान्वित होते हैं।

आप इस प्रकार एक event की घोषणा का विस्तार कर सकते हैं:

public event MyEventHandler MyEvent 
{ 
    add 
    { 
     ... 
    } 
    remove 
    { 
     ... 
    } 
} 

उदाहरण के लिए देखें, How to: Use a Dictionary to Store Event Instances (C# Programming Guide)

Events get a little overhaul in C# 4, Part I: Locks कैसे ऑटो कार्यान्वित घटनाओं सी #   3 4 के बीच और सी #   अलग के लिए देखें।

+1

ओह वाह मुझे पता नहीं आप ऐसा करते हैं सकता था पर जाएँ है। टीआईएल। +1 –

6

यह विशेष रूप से घटना accessors घोषित करने के लिए है, यानी जोड़ने और accessors हटाने के लिए संभव है: - दूसरे शब्दों में यह संभव तरह कुछ है।

ऐसा करने से नए ईवेंट हैंडलर जोड़े जाने पर कस्टम तर्क करना संभव हो जाता है।

1

जब आप अपनी घटनाओं को परिभाषित करते हैं, तो आप वास्तव में अधिक कोड निष्पादित करने के लिए लंबे प्रारूप का उपयोग कर सकते हैं जब लोग स्वयं को संलग्न करते हैं या हटाते हैं आप घटनाओं

add और remove कीवर्ड पर जानकारी देखें।

1

यह अगर आप इस स्यूडोकोड की तरह अपने कस्टम घटना की घोषणा, संभव है:

class MyClass 
{ 


    public event EventHandler MyEvent 
    { 
     add {  //someone subscribed to this event ! } 
     remove {  //someone unsubscribed from this event ! } 
    } 


    ... 
} 
1

मुझे लगता है, आप घटना accessors के लिए देख रहे हैं। ग्राहकों के संदर्भ को अनुकूलित करने का तरीका। यहाँ आप कैसे कर सकते हैं यह

public class TestClass 
{ 

    private event EventHandler UnderlyingEvent; 
    public event EventHandler TestEvent 
    { 
     add 
     { 
      UnderlyingEvent += value; 
     } 
     remove 
     { 
      UnderlyingEvent -= value; 
     } 
    } 
} 

अधिक जानकारी के लिए, कृपया यह लेख

http://msdn.microsoft.com/en-us/magazine/cc163533.aspx

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