कभी-कभी मुझे किसी फ़ंक्शन के भीतर कई डिस्पोजेबल ऑब्जेक्ट्स का उपयोग करने की आवश्यकता होती है। सबसे आम मामले में StreamReader और StreamWriter है लेकिन कभी-कभी यह इससे भी अधिक है।नेस्टेड का उपयोग करके (...) कथन
कथन का उपयोग करके नेस्टेड जल्दी से जोड़कर बदसूरत लगते हैं। इसका समाधान करने के लिए मैंने एक छोटी सी कक्षा बनाई है जो IDISposable ऑब्जेक्ट्स एकत्र करता है और जब इसे स्वयं डिस्पोजेक्ट किया जाता है तो उनका निपटान करता है।
public class MultiDispose : HashSet<IDisposable>, IDisposable
{
public MultiDispose(params IDisposable[] objectsToDispose)
{
foreach (IDisposable d in objectsToDispose)
{
this.Add(d);
}
}
public T Add<T>(T obj) where T : IDisposable
{
base.Add(obj);
return obj;
}
public void DisposeObject(IDisposable obj)
{
obj.Dispose();
base.Remove(obj);
}
#region IDisposable Members
public void Dispose()
{
foreach (IDisposable d in this)
{
d.Dispose();
}
}
#endregion
}
तो मेरी कोड अब इस तरह दिखता है:
using (MultiDispose md = new MultiDispose())
{
StreamReader rdr = md.Add(new StreamReader(args[0]));
StreamWriter wrt = md.Add(new StreamWriter(args[1]));
WhateverElseNeedsDisposing w = md.Add(new WhateverElseNeedsDisposing());
// code
}
क्या इस दृष्टिकोण है कि सड़क के नीचे समस्याएं पैदा कर सकता के साथ कुछ गलत है? मैंने उद्देश्य पर हैशसेट से विरासत निकाला गया फ़ंक्शन छोड़ दिया ताकि कक्षा अधिक लचीला हो। निश्चित रूप से इस फ़ंक्शन का दुरुपयोग करने से वस्तुएं ठीक से निपटान नहीं हो सकती हैं, लेकिन फिर इस कक्षा के बिना पैर में खुद को शूट करने के कई अन्य तरीके हो सकते हैं।
-1: प्रश्न भी व्यक्तिपरक – Simon
IMO - बस कई स्तरों पर एक बुरा विचार। मुझे उम्मीद है कि आप यहां अपने मार्गदर्शन के लिए मार्गदर्शन करेंगे और किसी भी टीम के सदस्यों के साथ आप काम कर सकते हैं। कुछ स्पष्टता के लिए स्कीट का जवाब देखें। –
@ सिमॉन: मूर्ख मत बनो। हमारे पास हर समय नामकरण, पूंजीकरण और इंडेंटिंग के बारे में प्रश्न हैं। यह तुलना में काफी महत्वपूर्ण है। –