मैं कुछ कोड देख रहा हूँ और उसका यह कथन है:
~ConnectionManager()
{
Dispose(false);
}
वर्ग IDisposable
इंटरफ़ेस को लागू करता है, लेकिन मुझे नहीं पता कि यह उस भाग का हिस्सा है जिसके लिए tilde (~) का उपयोग किया जाता है।
मैं कुछ कोड देख रहा हूँ और उसका यह कथन है:
~ConnectionManager()
{
Dispose(false);
}
वर्ग IDisposable
इंटरफ़ेस को लागू करता है, लेकिन मुझे नहीं पता कि यह उस भाग का हिस्सा है जिसके लिए tilde (~) का उपयोग किया जाता है।
जवाबों:
~ नाशवान है
अंतिम रूप
C # में, अंतिम विधि उन ऑपरेशनों को करती है जो एक मानक C ++ विध्वंसक करता है। C # में, आप इसे अंतिम रूप नहीं देते हैं - आप वर्ग के नाम से पहले एक टिल्ड (~) प्रतीक रखने के C ++ डिस्ट्रक्टर सिंटैक्स का उपयोग करते हैं।
निपटान
कक्षा के उपयोगकर्ता द्वारा स्पष्ट रूप से कहा जा सकता है कि एक Close()
या Dispose()
विधि में वस्तुओं के निपटान के लिए बेहतर है । जीसी द्वारा अंतिम रूप (विध्वंसक) कहा जाता है।
IDisposable इंटरफ़ेस दुनिया बताता है कि अपने वर्ग संसाधनों निपटारा करने के लिए की जरूरत है उस पर रखती है और उपयोगकर्ता उन्हें रिहा करने के लिए एक तरह से प्रदान करता है। यदि आपको अपनी कक्षा में एक अंतिम रूप से लागू करने की आवश्यकता है, तो आपके निपटान विधि को यह सुनिश्चित करने के लिए विधि का उपयोग करना चाहिएGC.SuppressFinalize()
कि आपके उदाहरण को अंतिम रूप दिया जाए।
क्या उपयोग करें?
एक विध्वंसक को स्पष्ट रूप से कॉल करना कानूनी नहीं है। आपका विध्वंसक कचरा कलेक्टर द्वारा बुलाया जाएगा। यदि आप अनमोल संसाधनों को संभालते हैं (जैसे कि फ़ाइल हैंडल) जिसे आप बंद करना चाहते हैं और जितनी जल्दी हो सके निपटाना चाहते हैं, तो आपको आईडीसोफाइल इंटरफ़ेस लागू करना चाहिए।
Finalize
विधि विरासत श्रृंखला में सभी उदाहरणों के लिए पुनरावर्ती कहलाती है, सबसे अधिक व्युत्पन्न से कम से कम व्युत्पन्न" । ध्यान दें कि यह वही व्यवहार नहीं है जो आप अंतर्निहित विध्वंसक से प्राप्त करेंगे, हालांकि।
यह एक फाइनल है । ईमानदार होने के लिए, आपको अंतिम रूप से लिखने की आवश्यकता बहुत कम होनी चाहिए। आप वास्तव में केवल एक लिखने की जरूरत है अगर:
IntPtr
) के माध्यम से सीधी पहुंच है और आप इसका उपयोग नहीं कर सकते हैं SafeHandle
जो इसे आसान बनाता हैIDisposable
एक ऐसे वर्ग में लागू कर रहे हैं जो सील नहीं है। (मेरी प्राथमिकता वर्गों को तब तक सील करना है जब तक वे विरासत के लिए डिज़ाइन नहीं किए जाते हैं।) एक अंतिम उपकरण ऐसे मामलों में विहित डिस्पोज़ल पैटर्न का हिस्सा है।इसका उपयोग वर्ग के लिए विनाशकारी को इंगित करने के लिए किया जाता है।
try/finally
ब्लॉक शामिल होता है जो सुनिश्चित करता है कि मूल Finalize
विधि कहा जाता है। अधिकांश चीजें जो विध्वंसक की सच्ची होती हैं, वे अंतिम रूप से सत्य होती हैं, और इसके विपरीत, लेकिन शब्दों का अर्थ थोड़ा अलग होता है।
C ++ के समान, यह विनाशकारी है; हालाँकि C # में आपने इसे स्पष्ट रूप से नहीं कहा है, यह तब एकत्रित किया जाता है जब ऑब्जेक्ट एकत्र हो जाता है।
विध्वंसक देखें (C # प्रोग्रामिंग गाइड) । ध्यान रखें, हालांकि, C ++ के विपरीत, प्रोग्रामर का कोई नियंत्रण नहीं है जब विध्वंसक को बुलाया जाता है क्योंकि यह कचरा कलेक्टर द्वारा निर्धारित किया जाता है।
~ आमतौर पर एक डिकंस्ट्रक्टर का प्रतिनिधित्व करता है। जो किसी वस्तु के मरने से ठीक पहले चलाया जाता है।