भीतर किया जाना चाहिए यह वही काम करता है किसी भी अन्य असाइनमेंट के रूप में: =
IDisposable
परवाह नहीं करता है या कोई जादू नहीं करता है।
प्रारंभ में वैरिएबल को असाइन किया गया ऑब्जेक्ट Dispose
को मैन्युअल रूप से (या बेहतर, using
के साथ) आवश्यक रूप से आवंटित करना होगा। हालांकि, इस बिंदु पर Dispose
पर कॉल करने के लिए हमेशा सही नहीं हो सकता है: जो ऑब्जेक्ट का मालिक है और जीवनकाल को नियंत्रित करता है?
क्या पुराने ऑब्जेक्ट पर कब्जा कर लिया गया मेमोरी स्पेस केवल नए ऑब्जेक्ट द्वारा ओवरराइट किया जाएगा?
लागू नहीं होता है। चर "नाम" वस्तुओं। एक ऑब्जेक्ट स्वयं है और एक चर एक चर है - ऑब्जेक्ट या "स्मृति में स्थान" नहीं। (एरिक लिपर्ट की टिप्पणी देखें: पूर्ववर्ती चर के उच्च स्तर का दृश्य है, जबकि एरिक की टिप्पणी सी # कार्यान्वयन, भावना, और शब्दावली में चरम रूप से अधिक सटीक रूप से प्रतिबिंबित करती है।)
चर केवल ऑब्जेक्ट जीवनकाल को प्रभावित करते हैं जैसे वे * रख सकते हैं वस्तु को पुनः प्राप्त करने से ऑब्जेक्ट (और इस प्रकार अंतिम रूप से चलने वाले [संभवतः] चलने वाले को अंतिम रूप से रोकें)। हालांकि, वेरिएबल अर्थात् जीवनकाल पर ऑब्जेक्ट्स को नियंत्रित नहीं करते हैं - एक ऑब्जेक्ट को पुनः प्राप्त करने पर भी डिसपोज़ किया जा सकता है - या आवश्यकतानुसार Dispose
को आमंत्रित करने की आवश्यकता को समाप्त करें।
हैप्पी कोडिंग।
जब डिस्पोजेबल वस्तुओं इतना आसान कार्यक्षेत्रों से बाहर भी साथ काम कर - वस्तुओं उनके जीवनकाल के दौरान कई विभिन्न चर को सौंपा जा सकता है! - मुझे यह परिभाषित करना सबसे अच्छा लगता है कि कौन "नियंत्रण लेता है" जिसे मैं प्रलेखन में एनोटेट करता हूं। यदि ऑब्जेक्ट आजीवन अच्छी तरह से एक दायरे तक सीमित है तो using
अच्छी तरह से काम करता है।
* एक स्थानीय चर स्वयं वस्तु को दृढ़ता से पहुंचने के लिए पर्याप्त रूप से पर्याप्त नहीं है क्योंकि यह संभव है कि परिवर्तनीय/असाइनमेंट आक्रामक रूप से ऑप्टिमाइज़ किया गया हो, यदि बाद में उसी दायरे से उपयोग नहीं किया जाता है। यह टाइमर की तरह वस्तुओं को पीड़ित कर सकता है।
स्रोत
2011-09-28 23:22:55
मुझे नहीं पता कि आप जानते हैं या नहीं, लेकिन चूंकि आपने इस सवाल को [कचरा संग्रह] और [idisposable] के साथ टैग किया है, मैंने सोचा था कि मैं बस इतना कहूंगा कि कचरा कलेक्टर कभी भी 'आईडीस्पोजेबल' नहीं कहता है।) '। आपको स्पष्ट रूप से अपना कोड लिखना चाहिए ताकि जीसी को एकत्रित करने से पहले 'निपटान() 'कहा जा सके। – Enigmativity
@ निष्क्रियता "माइक्रोसॉफ्ट-ordained" उदाहरणों में सभी को 'निपटान (झूठा)' का आह्वान करने वाला फाइनलाइज़र है (मुझे लगता है कि बाहरी संसाधनों को जारी होने का * मौका * सुनिश्चित करने के लिए यह आखिरी खाई प्रयास के रूप में किया जाता है)। माना जाता है कि जीसी और फाइनलइज़र दोनों चंचल जानवर हैं और आम तौर पर उन पर भरोसा नहीं किया जाना चाहिए जहां डिस्पोजेबल ऑब्जेक्ट्स का उपयोग किया जाता है ... वाईएमएमवी। –
@pst - हाँ, वे करते हैं और मुझे लगता है कि भ्रम उत्पन्न होता है। .NET डेवलपर्स के लिए यह भी महत्वपूर्ण है कि यह भी समझें कि अंतिम गारंटी कभी भी कहलाए जाने की कोई गारंटी नहीं है, इसलिए किसी को यह सुनिश्चित करने की आवश्यकता होगी कि किसी का 'निपटान' विधि "वैकल्पिक" है यदि इसे इस पैटर्न का उपयोग करके कोड किया गया हो। – Enigmativity