अंतिम रूप दें
संग्रह के लिए योग्य वस्तु को पुनः प्राप्त करने से पहले कचरा कलेक्टर द्वारा अंतिम रूप () को बुलाया जाता है। कचरा संग्रहकर्ता गैर-संदर्भित वस्तु के लिए स्मृति को हटाने की जिम्मेदारी लेगा। स्मृति में उस वस्तु के मान्य संदर्भ नहीं होने के बाद कचरा संग्रहकर्ता इस विधि को किसी बिंदु पर कॉल करता है।
ढांचा इस बात की गारंटी नहीं देता है कि ऐसा कब होगा, हम कचरा संग्रह के लिए बाध्य कर सकते हैं लेकिन यह एक कार्यक्रम के प्रदर्शन को नुकसान पहुंचाएगा। फ़ाइनलाइज़ () ऑब्जेक्ट क्लास से संबंधित है और इसे रनटाइम द्वारा बुलाया जाएगा।
उदाहरण
using System; namespace DemoApplication{ public class Demo{ ~Demo(){ Console.WriteLine("Finalize called"); } } }
निपटान
विंडोज़ हैंडल, डेटाबेस कनेक्शन, नेटवर्क कनेक्शन, फाइलें इत्यादि जैसे कुछ संसाधन हैं जिन्हें कचरा कलेक्टर द्वारा एकत्र नहीं किया जा सकता है। यदि हम कुछ विशिष्ट वस्तुओं को स्पष्ट रूप से जारी करना चाहते हैं तो IDisposable को लागू करने और IDisposable इंटरफ़ेस की निपटान() विधि को ओवरराइड करने के लिए यह सबसे अच्छा है।
डिस्पोज़ () विधि को स्वचालित रूप से नहीं कहा जाता है और जब किसी ऑब्जेक्ट की आवश्यकता नहीं होती है, तो हमें इसे क्लाइंट एप्लिकेशन से स्पष्ट रूप से कॉल करना चाहिए। ऑब्जेक्ट के अन्य संदर्भ जीवित होने पर भी निपटान() को कॉल किया जा सकता है।
उदाहरण
using System; namespace DemoApplication{ public class Demo : IDisposable{ private bool disposed = false; public void Dispose(){ Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing){ if (!disposed){ if (disposing){ //clean up managed objects } //clean up unmanaged objects disposed = true; } } } }
Microsoft अनुशंसा करता है कि अप्रबंधित संसाधनों के साथ कार्य करते समय हम निपटान और अंतिम रूप दोनों को लागू करें। फ़ाइनलाइज़ कार्यान्वयन चलेगा और संसाधन तब भी जारी किए जाएंगे जब ऑब्जेक्ट कचरा एकत्र किया जाता है, भले ही डेवलपर ने निपटान विधि को स्पष्ट रूप से कॉल करने की उपेक्षा की हो।