का निपटान मैं सी # कक्षाओं और उनके deconstructor के बारे में थोड़ा उलझन में हूँ।इवेंट हैंडलर और सी # कक्षाएं विनाशक/
मैं मैं निर्माता में हो रही एक वर्ग उदाहरण में कुछ ईवेंट हैंडलर्स का उपभोग करने के लिए है:
public Foo(IFooHandler handler)
{
handler.Load += Load;
handler.Close += Close;
}
मैं जब फू वर्ग नष्ट हो जाता है कि घटना के लिए सदस्यता समाप्त करने की जरूरत है। क्या मैं IDisposable
लागू करता हूं और वहां पर सदस्यता रद्द करता हूं, या एक डिकोनस्ट्रक्टर में? मुझे उन घटनाओं का उपभोग करने की ज़रूरत है, मैं इसे एक और तरीका नहीं कर सकता।
कक्षाओं में से एक के लिए, मैं एक उदाहरण बनाता हूं, प्रगति की जांच करता हूं, और फिर कक्षा का उदाहरण गुंजाइश से बाहर हो जाता है। दूसरे के लिए यह MainForm
में फॉर्म बंद होने तक रहता है। सबसे पहले मैं इस बारे में चिंतित हूं क्योंकि इसमें अभी भी उस ईवेंट हैंडलर का संदर्भ हो सकता है और ठीक से नहीं जा सकता है।
मैं स्मृति को रिसाव नहीं करना चाहता हूं। कब और कैसे सदस्यता समाप्त करनी चाहिए?
आह! मैंने सोचा कि हमें IDISposable लागू नहीं करना चाहिए जब तक कि हम अप्रबंधित कोड की सफाई नहीं कर रहे हैं? –
अन्य कारणों से IDISposable लागू किया जा सकता है, यह अप्रबंधित संसाधनों की सफाई तक ही सीमित नहीं है ... –
यदि आप आम डिस्पोजेबल पैटर्न को देखते हैं, तो प्रबंधित और अप्रबंधित संसाधनों को संभालने का एक मार्ग है। अधिकतर आपके पास केवल अप्रबंधित संसाधन और/या प्रबंधित लोग हैं। लेकिन आपके मामले में यह ठीक है कि केवल प्रबंधित संसाधनों को ही साफ किया जाना चाहिए। – Oliver