2010-05-07 6 views
28

मैं जानना चाहता हूं कि हम घटनाओं को स्थैतिक घोषित कर सकते हैं यदि हां क्यों और इस तरह के घोषणा का आवेदन।घटनाओं को स्टेटिक के रूप में घोषित किया जा सकता है, यदि हां कैसे और क्यों

नमूना कृपया देखकर

उत्तर

45

आप स्थिर घटनाएं बना सकते हैं। आप उन्हें सामान्य घटना के समान तरीके से उपयोग करते हैं, सिवाय इसके कि यह कक्षा के भीतर एक स्थिर संदर्भ में उपयोग किया जाता है।

public class MyClass 
{ 
    public static event EventHandler MyEvent; 

    private static void RaiseEvent() 
    { 
     var handler = MyEvent; 
     if (handler != null) 
      handler(typeof(MyClass), EventArgs.Empty); 
    } 
} 

कहा जा रहा है कि स्थिर घटनाओं के साथ कई मुद्दे हैं। आपको स्थैतिक घटनाओं से अपनी ऑब्जेक्ट्स की सदस्यता समाप्त करने के लिए अतिरिक्त देखभाल करनी होगी, क्योंकि स्थैतिक ईवेंट की सदस्यता आपके सब्सक्राइबिंग इंस्टेंस को रूट करेगी, और कचरा कलेक्टर को इसे एकत्रित करने से रोक देगा।

इसके अलावा, मुझे पता चला है कि ज्यादातर मामलों में जहां मैं स्थिर घटनाएं बनाना चाहता हूं, मैं Singleton पर मानक घटना का उपयोग करने की दिशा में सीखना चाहता हूं। यह एक स्थिर घटना के रूप में एक ही परिदृश्य को संभालता है, लेकिन (आईएमओ) अधिक स्पष्ट है कि आप "वैश्विक" स्तर के उदाहरण की सदस्यता ले रहे हैं।

8

हाँ, आप कर सकते हैं। उदाहरण के लिए, Application.ApplicationExit देखें। नोट, हालांकि, उस घटना पर स्थिर घटनाओं को जोड़ते समय स्मृति लीक के बारे में चेतावनियां; जो सभी स्थिर घटनाओं पर लागू होता है।

जब आप उनका उपयोग करते हैं तो जादूगर के बारे में कुछ भी नहीं है: जब आपको स्थिर वर्ग या एक घटना के लिए एक ईवेंट प्रदान करने की आवश्यकता होती है जो विशेष रूप से स्थिर डेटा के साथ सौदा करती है और इसे इस तरह लागू करने के लिए समझ में आता है।

1

हां, आप एक घटना को स्थैतिक घोषित कर सकते हैं। यदि आप उदाहरण घटनाएं थे, तो आप उनका उपयोग उसी तरह करते हैं, लेकिन यदि आप variableName.EventName के बजाय किसी स्थिर तरीके से ईवेंट नाम का उपयोग करते हैं (यानी ClassName.EventName)।

अब ... क्या आप स्थिर घटनाएं चाहते हैं? यह बेहद बहस योग्य है। मैं व्यक्तिगत रूप से नहीं कहूंगा, क्योंकि स्थैतिक कुछ भी परीक्षण में कठिनाइयों का निर्माण करता है और जब भी संभव हो तब से बचा जाना चाहिए।

लेकिन यह निश्चित रूप से संभव है।

0
public delegate void SomeEventDelegate(); 

public class SomeClass 
{ 
     public static event SomeEventDelegate SomeEvent; 
} 
संबंधित मुद्दे

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