विशिष्ट प्रश्न के लिए "कचरा एकत्र किया जा pClass करेंगे": घटना सदस्यता pClass के संग्रह पर कोई प्रभाव नहीं (प्रकाशक के रूप में) है।
सामान्य रूप से जीसी के लिए (विशेष रूप से, लक्ष्य): यह निर्भर करता है कि MyFunction स्थिर या उदाहरण-आधारित है या नहीं।
एक उदाहरण विधि में एक प्रतिनिधि (जैसे एक ईवेंट सदस्यता) उदाहरण के संदर्भ में शामिल है। तो हाँ, एक घटना सदस्यता जीसी को रोक देगा। हालांकि, जैसे ही ऑब्जेक्ट प्रकाशित करने वाला ऑब्जेक्ट (उपरोक्त पी क्लास) संग्रह के लिए योग्य है, यह एक समस्या बन जाती है।
ध्यान दें कि यह एक तरफा है; यानी अगर हमने:
publisher.SomeEvent += target.SomeHandler;
फिर "प्रकाशक" "लक्ष्य" जिंदा है, लेकिन 'लक्ष्य' रखने नहीं होगा "प्रकाशक" जीवित रखेंगे।
तो नहीं: यदि पी क्लास को एकत्रित किया जा रहा है, तो श्रोताओं की सदस्यता समाप्त करने की कोई आवश्यकता नहीं है। हालांकि, यदि पी क्लास लंबे समय तक रहता था (माईफंक्शन के साथ उदाहरण से अधिक लंबा), तो पी क्लास उस उदाहरण को जीवित रख सकता है, इसलिए यदि सदस्यता को एकत्रित करना चाहते हैं तो सदस्यता समाप्त करने के लिए आवश्यक हो।
स्थिर कारण, हालांकि, इस कारण से, उदाहरण-आधारित हैंडलर के साथ उपयोग किए जाने पर बहुत खतरनाक होते हैं।
स्रोत
2008-11-18 09:43:27
मैं इस प्रश्न में दिलचस्पी रखने वाले पाठकों को तात्कालिक रूप से सुझाव देने जा रहा हूं कि हल्के घटनाओं/कमजोर घटना पैटर्न से परिचित होना उपयुक्त हो सकता है, जो कचरा संग्रहण होने से नहीं रोकते हैं। इस विषय के लिए एक अच्छा SO बूटस्ट्रैप http://stackoverflow.com/questions/185931/weakreference-and-event-handling – fostandy
पोस्टरिटी के लिए नोट: शून्य के संदर्भ को सेट करना कचरा कलेक्टर को केवल एक पंक्ति के विस्तार से खर्च कर देता है संदर्भ। .NET वीबी 6 नहीं है। –