मैं परंपरागत तरीके से IDisposable को संभालने के लिए तकनीक से अवगत हूं। कहो, OnStop() खिड़कियों सेवा की विधि में मैं बंद संदेश कतार ग्राहक:शून्य पर सेट करके निपटान?
if (client != null)
{
client.Dispose();
}
पहली बार आज मैंने देखा कि एक पुरुष इस तरह से कर रही के लिए:
using (client)
{
client = null;
}
वास्तव में क्या हो रहा है उसके अंदर "प्रयोग" या क्या वह बिल्कुल सही तरीके से निपटता है?
बीटीडब्लू, एक बात जो मुझे लगता है कि "उपयोग" की उपयोगिता में वृद्धि होगी, स्पष्ट रूप से "छाया चर" को शून्य पर सेट करने की क्षमता होगी, ताकि ऑब्जेक्ट का निपटारा नहीं किया जा सके, या फिर "उपयोग" का एक संस्करण हो केवल गलती के मामले में निपटान करेगा। उदाहरण के लिए, एक कन्स्ट्रक्टर, ऑब्जेक्ट के फ़ील्ड का निर्माण करने के लिए "उपयोग" कर सकता है, और उसके बाद इसे वापस रखने से ठीक पहले "रखने" का फैसला कर सकता है। "उपयोग" के बजाय प्रयास/अंत में ब्लॉक का उपयोग करना संभव है, लेकिन वे अधिक verbose और कम स्पष्ट हैं। – supercat
@supercat आईएमओ कि परिदृश्य पहले से ही जटिल है - इसके बारे में स्पष्ट होना बेहतर है, और समझ रहा है कि क्या हो रहा है (यानी मैं 'try' /' अंत में 'खुश हूं) –
मैंने अभी कोड को फिर से देखा और सोचा मैंने इस उद्देश्य को समझ लिया - यदि "ग्राहक" एक क्षेत्र या संपत्ति है, तो इसका जीवनकाल शायद "उपयोग" ब्लॉक तक ही सीमित नहीं हो सकता है। कुछ मामलों में, इसे निपटाने से पहले ऑब्जेक्ट का संदर्भ रखने वाले फ़ील्ड या प्रॉपर्टी को साफ़ करना आवश्यक हो सकता है। यहां दिखाया गया "उपयोग" कोड स्पष्ट रूप से एक अस्थायी चर बनाने से अधिक संक्षिप्त होगा, हालांकि इस तरह के उद्देश्य के लिए "जैप" दिनचर्या का उपयोग करने के लिए एक बेहतर दृष्टिकोण होगा। – supercat