IDisposable
을 구현해야하는 부모 및 자식 클래스가 있습니다. virtual
(및 base.Dispose()
?) 전화는 어디에서 작동해야합니까? 그냥 Dispose(bool disposing)
호출을 덮어 씌우면 실제로 Dispose()
함수 (그냥 상속 된 것을 사용함)를 갖지 않고 IDisposable
을 구현한다는 사실이 이상하다고 느끼지만 그 밖의 모든 것은 가지고 있습니다.부모가 IDisposable을 구현할 때 하위 클래스에 IDisposable 구현
:
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