लागू करता है मेरे पास एक अभिभावक और बाल वर्ग है जिसे दोनों को IDisposable
लागू करने की आवश्यकता है। virtual
(और base.Dispose()
) कहां से खेलना चाहिए? जब मैं Dispose(bool disposing)
कॉल को ओवरराइड करता हूं, तो यह वास्तव में अजीब लगता है कि मैं IDisposable
को स्पष्ट Dispose()
फ़ंक्शन (केवल विरासत में उपयोग करने वाले) के बिना लागू करता हूं, लेकिन बाकी सब कुछ।उप-वर्ग पर आईडीस्पोजेबल लागू करना जब माता-पिता IDISposable
मैं (काफ़ी trivialized) क्या कर रहा था:
internal class FooBase : IDisposable
{
Socket baseSocket;
private void SendNormalShutdown() { }
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
private bool _disposed = false;
protected virtual void Dispose(bool disposing)
{
if (!_disposed)
{
if (disposing)
{
SendNormalShutdown();
}
baseSocket.Close();
}
}
~FooBase()
{
Dispose(false);
}
}
internal class Foo : FooBase, IDisposable
{
Socket extraSocket;
private bool _disposed = false;
protected override void Dispose(bool disposing)
{
if (!_disposed)
{
extraSocket.Close();
}
base.Dispose(disposing);
}
~Foo()
{
Dispose(false);
}
}
[MSDN] (https://msdn.microsoft.com/en-us/library/system.idisposable (v = vs.110) .aspx0) कैसे IDisposable को लागू करने वस्तुओं उपवर्ग के लिए पर सलाह नहीं है । – PeterM