2009-08-31 14 views
5

यदि मैं आईडीस्पोजेबल के साथ किसी ऑब्जेक्ट को कार्यान्वित करता हूं, तो उस ऑब्जेक्ट के स्वामित्व वाली सभी ऑब्जेक्ट्स को भी लागू करना चाहिए, भले ही उनके पास रिलीज़ करने के लिए कोई अन्य संसाधन न हो?आईडीस्पोजेबल चेन

उत्तर

12

हां। अपने सदस्य चर को सही तरीके से निपटाने के लिए, आपको उनका निपटान करने की आवश्यकता है।

जब भी आप एक आईडीस्पोजेबल क्लास को समाहित करते हैं, तो आपको अपनी कक्षा को पहचानने योग्य बनाना चाहिए। अपनी निपटान विधि में, आपको अपने encapsulated संसाधनों का निपटान करना चाहिए। असल में, उन तरीकों से उनका इलाज करें जैसे आप मूल संसाधन का इलाज करेंगे।

+0

केवल आप कल्पना नहीं कर सकते IDisplosable को लागू करने की जरूरत नहीं है, जिसमें जीसी फाइनेंजर थ्रेड द्वारा प्रेरित अगर वस्तुओं का निपटारा किया जाता है। –

+0

सच है - लेकिन मुझे यकीन नहीं है कि यह कैसे प्रासंगिक है। यदि आप अपनी कक्षा को लपेटते हैं और इसे डिस्पोजेबल बनाते हैं, तो आप उस क्रम को नियंत्रित कर सकते हैं जिसमें प्रत्येक encapsulated संसाधन का निपटारा किया जाता है। –

1

यदि आप निर्धारिक निपटान चाहते हैं, तो आखिरकार कुछ क्लाइंट को "उपयोग" ब्लॉक में कॉल को निपटाने या लपेटने की आवश्यकता होती है। अपनी ऑब्जेक्ट पर ट्राइकल करने के लिए, उसमें मालिक की पहचान करने की आवश्यकता हो सकती है।

आपको किसी भी समय-निर्भर संसाधनों को मुक्त करने के लिए कचरा कलेक्टर पर भरोसा नहीं करना चाहिए।

+0

यह वास्तव में एक अप्रबंधित संसाधन समस्या नहीं है। ऑब्जेक्ट्स जो अप्रबंधित संसाधन का मालिक होगा 1) 'सेफहैंडल या 2) का उपयोग करें, अप्रबंधित संसाधनों को जारी करने के लिए उपयोगकर्ता द्वारा परिभाषित अंतिमकर्ता का उपयोग करें। हालांकि यह गैर-निर्धारक है, कचरा कलेक्टर * अनधिकृत संसाधनों को ठीक से जारी करने में सक्षम है। उचित 'आईडीस्पोजेबल' चेन का प्राथमिक लाभ समय पर "बंद", "अंत" या "रिलीज" मुद्दों के प्रति संवेदनशील है, जैसे (लेकिन निश्चित रूप से सीमित नहीं) I/O। –

+0

नोट किया गया। धन्यवाद। –

1

हां, एक स्वामित्व वर्ग को IDISposable लागू करना चाहिए, लेकिन इसे एक अंतिम (विनाशक) नहीं होना चाहिए (नहीं होना चाहिए)।

1

nop, वे सिर्फ एक "का उपयोग" बयान के साथ उस वर्ग का उपयोग सुनिश्चित करें कि वे उस वस्तु को ठीक से निपटाने बनाने की जरूरत है, लेकिन उन वस्तुओं खुद को

+0

यदि कोई अन्य श्रेणी एक डिस्पोजेबल ऑब्जेक्ट का मालिक है, तो उसे IDISposable भी लागू करना चाहिए। अन्यथा, मालिक वर्ग के पास कॉलर्स को इसका निपटान करने की अनुमति देने का कोई तरीका नहीं है, और इसके परिणामस्वरूप, डिस्पोजेबल संसाधनों का आंतरिक रूप से स्वामित्व है। –

+0

यह इस बात पर निर्भर करता है कि कक्षा आंतरिक रूप से – BlackTigerX

+0

ऑब्जेक्ट का उपयोग कैसे करती है, मैं विशेष रूप से "निर्दिष्ट प्रकार का सदस्य चर" का अर्थ "स्वयं" शब्द का उपयोग करता हूं, इसलिए यह काम नहीं करता है। मैं जो काम कर रहा हूं उसके लिए मैं "उपयोग" का उपयोग करता हूं। –

संबंधित मुद्दे