चलो कहते हैं कि मैं एक वर्ग एक जो एक्स अब कहा जाता है मैं एक वर्ग बी है और एक विधि में मैं एक करने के लिए एक उदाहरण हो और बी में एक हैंडलर को घटना बाँध एक ईवेंट सक्रिय कर सकते हैं करते हैं:ईवेंट हैंडलर से सुरक्षित तरीके से कैसे छुटकारा पाएं?
public void BindEvent(A a)
{
a.X += AEventHandler;
}
मेरे पास इसके बारे में तीन प्रश्न हैं।
यह सच है कि जब मैं अब सेट शून्य पर बी उदाहरण के संदर्भ में है, यह कचरा एकत्र नहीं किया जाएगा के बाद से कचरा कलेक्टर सोचता है कि यह अभी भी उपयोग (एक प्रकार से बेकार ध्यान में रखते हुए है और संभावित रूप से की प्रति दखल स्मृति में बी)।
मेरे पास एक और ऑब्जेक्ट सी (कक्षा सी) के बारे में क्या है जिसमें मेरे पास ए ("this.a = new A()") का संदर्भ है। फिर मैं "बी। बाइंडवेन्ट (यह.ए)" कहता हूं, और सी में मैंने संदर्भ को एक शून्य ("this.a = null") पर सेट किया है। क्या यह ए की याद में स्मृति की प्रतिलिपि रखेगा क्योंकि यह बी में घटना के माध्यम से संदर्भित है?
यदि कोई या दोनों ऊपर से सत्य हैं, तो मैं इन मुद्दों को सबसे अच्छी तरह से कैसे रोक सकता हूं? अगर मेरे पास ईवेंट हैंडलर की पूरी सूची है ("ए। सोमेन्ट + = कुछ विधि" जैसी 10 लाइनें कहें) क्या मुझे उन्हें फिर से साफ करना चाहिए ("ए.मेमवेन्ट - = कुछ विधि")। कोड में किस समय या स्थान पर मुझे इन चीजों को करना चाहिए?
वैसे यह थोड़ा अस्पष्ट हो गया है लेकिन मुझे यकीन नहीं है कि बेहतर तरीके से कैसे समझाया जाए। अगर मुझे कुछ और विस्तृत जानकारी देने की ज़रूरत है तो कृपया एक टिप्पणी छोड़ दें।
मुझे पूरा यकीन है कि 2 गलत है। सबसे पहले, घटना * कभी भी प्रकाशक ('ए') को जीवित नहीं रखती - और दूसरा, कुछ भी 'ए' को देख नहीं सकता है ... इसलिए डेटा डिस्कनेक्ट और एकत्र हो गया है। –
दोह! मुझे सही साबित होना है। :-) –