कल एक माता पिता में पारित हो जाता है जब क्या जिसके परिणामस्वरूप व्यवहार है, हमारे कोडबेस पर दृश्य स्टूडियो कोड विश्लेषण के चलने के बाद, निम्न कोड एक मुद्दे के रूप में डाला गया था थाएक IDisposable IDisposable
चेतावनी CA2202 वस्तु 'stringReader' एक बार विधि '(विधि नाम)' की तुलना में अधिक निपटाया जा सकता है। सिस्टम उत्पन्न करने से बचने के लिए। ऑब्जेक्ट डिस्प्ले अपवाद जिसे आप कॉल नहीं करना चाहिए किसी ऑब्जेक्ट पर से अधिक समय का निपटान करें।
खोज ढेर अतिप्रवाह के बाद, मैं सामान्य समझ पर आए हैं कि अगर मैं IDisposable सदस्यों से युक्त एक कस्टम वर्ग बनाने के लिए थे, यह IDisposable खुद को लागू करना चाहिए, और सदस्य की dispose()
विधि कॉल।
मेरे दो सवाल
- सभी मामलों में जहां वस्तु एक्स निर्माण के दौरान एक पैरामीटर के रूप में एक
IDisposable
वस्तु वाई के लिए एक संदर्भ लेता में हैं, यह मान लेना सही है कि वस्तु X Y की और से स्वामित्व ले जाएगा उस समय के बाद,X.dispose()
बुला होगा हमेशाY.dispose()
- बुला में परिणाम यह कोड और अपवादों चेतावनी संदेश में वर्णित के रूप के एक पुराने टुकड़ा सूचित किया गया कभी नहीं किया है (मेरी जानकारी के अनुसार) है। यदि उपर्युक्त बिंदु माना जाता है, तो डबल
using
ब्लॉक क्योंstringReader.dispose()
को दो बार कॉल करने और अपवाद फेंकने का परिणाम नहीं देता है?
आपको क्या उम्मीद करनी चाहिए कि संलग्न प्रकार के कार्यान्वयनकर्ता ने आपके द्वारा किए गए डिस्पोजेबल के संबंध में * उसका व्यवहार * दस्तावेज किया है। –