दृश्य स्टूडियो में, जब मैं लाइन "Implements IDisposable
" टाइप करें, आईडीई स्वचालित रूप से जोड़ता है:वीबीएनईटी - आईडीआईएसओपेबल को लागू करते समय एक अंतिम विधि जोड़ा जाना चाहिए?
- एक
disposedValue
सदस्य चर - एक
Sub Dispose() Implements IDisposable.Dispose
- एक
Sub Dispose(ByVal disposing As Boolean)
Dispose()
होना चाहिए अकेले छोड़ दिया, और साफ अप कोड Dispose(disposing)
में रखा जाना चाहिए।
हालांकि Dispose Finalize Pattern कहता है कि आपको Dispose(False)
पर कॉल करने के लिए Sub Finalize()
ओवरराइड करना चाहिए। आईडीई भी यह क्यों नहीं जोड़ता है? क्या मुझे इसे स्वयं जोड़ना चाहिए, या इसे किसी तरह से बुलाया जाना चाहिए?
संपादित करें: कोई विचार क्यों आईडीई स्वचालित रूप से आवश्यक सामग्री का 80% जोड़ता है लेकिन अंतिम विधि को छोड़ देता है?
इन चीजों को भूलने में आपकी सहायता के लिए इस तरह की सुविधा का पूरा बिंदु नहीं है?
EDIT2: आपके उत्कृष्ट उत्तरों के लिए धन्यवाद, अब यह सही समझ में आता है!
कार्यान्वयन का मतलब यह नहीं है कि आपको अंतिमकरण भी लागू करना चाहिए। आप बिना किसी फाइनलाइज़र की आवश्यकता के निपटारे विधि में अप्रबंधित संसाधनों को मुक्त कर सकते हैं। यदि आपको फाइनलाइज़र को कार्यान्वित करना होगा, तो आपका वास्तविक क्लीनअप तर्क एक अलग फ़ंक्शन में होना चाहिए जो दोनों कॉल का निपटान और अंतिम रूप दे। –
यह गलत है।यदि आप अप्रबंधित संसाधनों को मुक्त करने के लिए पूरी तरह से निपटान() पर भरोसा करते हैं, तो स्मृति उन मामलों में रिसाव होगी जहां निपटान नहीं कहा जाता है। यही वही है जो फाइनलाइज़र के लिए है। – Laurent
यह सुनिश्चित नहीं है कि मैंने पहले स्कॉट की टिप्पणी क्यों नहीं छोड़ी थी - इसे ध्यान में नहीं देखा होगा, लेकिन लॉरेन सही है - यदि आपका निपटान अप्रबंधित संसाधनों की सफाई कर रहा है, तो सुरक्षा के लिए अंतिम रूप देना आवश्यक है। इसे छोड़ दो क्योंकि तुम आलसी हो। –