У меня есть родительский и дочерний класс, оба из которых должны реализовать IDisposable. Где должны использоваться виртуальные (и base.Dispose()?) вызовы? Когда я просто переопределяю вызов Dispose(bool dispositing), мне кажется очень странным заявлять, что я реализую IDisposable без явной функции Dispose() (просто используя унаследованную), но иметь все остальное.
То, что я делал (немного упрощенно):
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);
}
}
Подробнее здесь: https://stackoverflow.com/questions/249 ... -idisposab
Реализация IDisposable в подклассе, когда родительский элемент также реализует IDisposable. ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Реализация IDisposable/IDisposeAsync как абстрактного базового класса [закрыто]
Anonymous » » в форуме C# - 0 Ответы
- 8 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Реализация IDisposable/IDisposeAsync как абстрактного базового класса [закрыто]
Anonymous » » в форуме C# - 0 Ответы
- 9 Просмотры
-
Последнее сообщение Anonymous
-