डिस्पोजेबल वस्तुओं autodisposed नहीं मिलेगा (निकटतम वे कहते हैं कि करने के लिए प्राप्त कर सकते हैं एक finalizer कि Dispose
यदि आवश्यक हो तो कॉल लागू कर रहा है)। आपको Dispose()
पर कॉल करके या using
ब्लॉक के साथ इसका उपयोग करके मैन्युअल रूप से ऐसा करना होगा।
आप ऑटो वस्तु निपटान के लिए चाहते हैं, आप ऐसा कर सकता है:
using (var g = new Graphics()) {
SomeMethod(g);
}
ब्लॉक का उपयोग सुनिश्चित करता है कि Dispose()
प्रक्रिया स्वतः ही कहा जाता है ब्लॉक समाप्त होता है (इसलिए इस मामले में जैसे ही, SomeMethod
के बाद रिटर्न या अपवाद फेंकता है)।
नोट: यदि संभव हो तो आपको उस स्थान पर ऑब्जेक्ट का निपटान करना चाहिए जहां आपने इसे बनाया था। एक वैध वस्तु में लेना और विधि के अंदर इसका निपटान भ्रम पैदा कर सकता है।
ग्राफिक्स और शायद अधिकांश यदि इस इंटरफ़ेस को लागू करने वाले सभी बीसीएल वर्ग भी Dispose()
को कॉलिज़र कहलाते हैं तो कॉल करेंगे। यह IDisposable
के उचित कार्यान्वयन का हिस्सा है। हालांकि आप कभी नहीं जानते कि फाइनलाइज़र कहलाता है और आपको इस क्रियान्वयन के विस्तार पर भरोसा नहीं करना चाहिए यदि आपको अपने ऑब्जेक्ट को निश्चित रूप से निपटाने के लिए आवश्यक है।
'नहीं' के अतिरिक्त, आपकी विधि ग्राफिक्स ऑब्जेक्ट का निपटान करने के लिए भी * जिम्मेदार नहीं होना चाहिए। यह महत्वपूर्ण है कि ग्राफिक्स ऑब्जेक्ट्स को एक ही स्थान पर प्रबंधित किया जाए - जिसका अर्थ है कि इसे उसी वर्ग में डिस्पोजेड किया जाना चाहिए जिसने इसे बनाया है। कॉल स्टैक के नीचे कुछ अनिश्चित जगह में ऑब्जेक्ट का निपटारा करने के लिए कोड को समझने और बनाए रखने में कठिनाई होती है, और आसानी से बाद में त्रुटियों का कारण बन सकती है। – MattDavey