महत्वपूर्ण: उदाहरणों से एक स्थिर घटना की सदस्यता लेने के बारे में बहुत सावधान रहें। स्टेटिक-टू-स्टेटिक ठीक है, लेकिन एक स्थिर घटना से एक उदाहरण हैंडलर तक एक सदस्यता एक उदाहरण (पढ़ने: बहुत खतरनाक) तरीका है जो उस उदाहरण को हमेशा के लिए जिंदा रखने के लिए है। जीसी लिंक देखेंगे, और जब तक आप सदस्यता समाप्त नहीं करेंगे (या वीक रेफरेंस की तरह कुछ उपयोग करें) तब तक इंस्टेंस एकत्र नहीं करेंगे।
स्थिर घटनाओं बनाने के लिए पैटर्न, isntance घटनाओं के रूप में एक ही है बस static
साथ:
public static event EventHandler SomeEvent;
बनाने के जीवन को आसान (शून्य जाँच फिर से), यहाँ एक उपयोगी चाल एक छोटी सी हैंडलर जोड़ने के लिए है:
public static event EventHandler SomeEvent = delegate {};
तो फिर तुम बस अशक्त की जांच के बिना यह आह्वान कर सकते हैं:
SomeEvent(null, EventArgs.Empty);
ध्यान दें कि प्रतिनिधि उदाहरण अपरिवर्तनीय हैं, और डी-रेफरेंसिंग थ्रेड-सुरक्षित है, यहां कभी भी दौड़ की स्थिति नहीं है, और लॉक करने की कोई आवश्यकता नहीं है ... जब हम डी-रेफरेंस का आह्वान करते हैं तो कभी भी सब्सक्राइब किया जाता है।
(अपने स्वयं के ईवेंट-तर्क आदि के लिए समायोजित करें)। यह चाल उदाहरण घटनाओं के लिए समान रूप से लागू होती है।
स्रोत
2008-11-14 06:23:38
अपना उत्तर पढ़ते समय, आपने कहा, "एक स्थिर घटना से एक आवृत्ति हैंडलर की सदस्यता एक उदाहरण है जो उस घटना को हमेशा के लिए जिंदा रखने के लिए एक शानदार तरीका है", मुझे लगता है कि यह हमेशा इष्टतम नहीं होगा। यदि, कहें, मैं चल रहा है, तो फॉर्म सेटिंग्स को स्टोर करने के लिए एक स्थिर वर्ग का उपयोग कर रहा हूं, यह स्थिर है क्योंकि यह स्थिर है, और इसमें कई प्रतियां नहीं हो सकती हैं? (नौसिखिया प्रोग्रामर, खराब शब्दावली को क्षमा करें) – Josh
@ जोश "शानदार तरीका" का अर्थ "वास्तव में एक खतरनाक तरीका" था - मैंने इसे स्पष्ट किया है। यदि आपके पास केवल एक सदस्यता है, तो स्थिर बनाम उदाहरण के बावजूद यह एक बड़ी समस्या नहीं है। खतरनाक हिस्सा तब आता है जब प्रत्येक इंस्टेंस एक स्थिर घटना के लिए (कहें), या दीर्घकालिक वस्तु पर एक ईवेंट की सदस्यता लेता है, और कभी भी सदस्यता समाप्त नहीं करता है। हे पस्टो: मेमोरी क्लोग। –
"एक स्थिर घटना से एक उदाहरण हैंडलर तक सदस्यता" क्या यह इस उद्देश्य पर लिखा गया है? मेरा मानना है कि यह "उदाहरण के हैंडलर से एक स्थैतिक घटना" से सदस्यता होना चाहिए। –