यदि आपके पास एक ही कक्षा में 40 गुण हैं तो आपके पास शायद एक डिज़ाइन समस्या हो, लेकिन आगे बढ़ना ... यह वास्तव में विशिष्ट उपयोग-मामले पर निर्भर करता है, लेकिन आपको केवल ऑब्जेक्टडिस्प्लेक्स अपवाद को फेंक देना चाहिए यदि संपत्ति नहीं हो सकती वास्तव में हल किया जाना चाहिए क्योंकि कक्षा का निपटारा किया गया है। एक ठोस उदाहरण के लिए: क्योंकि अंतर्निहित धारा निपटारा कर दिया गया है
public class MyStream : IDisposable
{
private string name;
private Stream stream;
public MyStream(string name)
{
this.Name = name;
this.Stream = new FileStream(...);
}
public string Name
{
get
{
return this.name;
}
}
public Stream Stream
{
get
{
if (this.IsDisposed)
{
throw new ObjectDisposedException();
}
return this.stream;
}
}
private bool IsDisposed { get; set; }
public void Dispose()
{
if (!this.IsDisposed)
{
this.IsDisposed = true;
this.Stream.Dispose();
this.Stream = null;
}
}
}
यहाँ, संपत्ति Stream
एक अपवाद फेंकता है, तो यह अब और नहीं किया जा सकता। लेकिन Name
में फेंकने का कोई कारण नहीं है। वहाँ से, कई मामलों में, आप अपने कोड तो वास्तविक समस्या पैदा करने वाले संपत्ति तक पहुँच अपवाद फेंकता गुणनखंड कर सकते हैं:
public int Length
{
get
{
// Since we access the Stream property, the ObjectDisposedException
// will be thrown when the class is disposed
return this.Stream.Length;
}
}
आप अभी भी इस पद्धति का अनुसरण करते हुए भी सजाने के लिए भी कई गुण होते हैं, तो आप Fody जैसे पुस्तकालयों का उपयोग कर सकते हैं जो आपको संकलन समय पर एक व्यवहार को इंजेक्ट करने की अनुमति देता है। इसका उपयोग करके, आप एक विशेषता [ThrowIfDisposed]
बना सकते हैं जिसे आप आवश्यकतानुसार गुणों पर लागू करते हैं।
स्रोत
2016-11-28 07:16:12
डिस्पोजेबल पैटर्न एक .NET 1.x गलती थी, इससे छुटकारा पाने में बहुत मुश्किल थी। सेफहैंडल कक्षाओं में लागू महत्वपूर्ण फाइनल के साथ .NET 2.0 में पूरी तरह से तय किया गया। पैटर्न के लिए एकमात्र शेष उपयोग तब होता है जब बेस क्लास इसे लागू करता है, जिससे आप इससे निपटने के लिए मजबूर हो जाते हैं। फेंकने के साथ अपने कोड को मिर्च करने से यह बेहतर नहीं होता है, आप बस अपवाद फेंकने के लिए बेस क्लास पर भरोसा करते हैं। –
आपकी टिप्पणियों के लिए धन्यवाद। मुझे सेफहैंडल क्लास में देखना होगा। मुझे डिस्पोजेबल पैटर्न कभी पसंद नहीं आया और बेहतर प्रतिस्थापन ढूंढना अच्छा लगेगा। – JHJ