Всем привет,
Есть базовый класс, выполняющий интерфейс IDisposable.
Теперь я хочу в классе потомке также выполнить этот интерфейс, как это правильно сделать?
Придумал только так:
class DBase : IDisposable
{
#region IDisposable Members
public void Dispose()
{
Console.WriteLine("Disposing base");
}
#endregion
}
class DChild : DBase
{
#region IDisposable Members
public override void Dispose()
{
Console.WriteLine("Disposing child");
base.Dispose();
}
Здравствуйте, debugx, Вы писали:
D>Прочитал, спасибо. D>Такой вопрос, в методе Dispose вызывать GC.SuppressFinalize(this) нужно только если в типе есть метод Finalize или всякий раз?
Здравствуйте, adontz, Вы писали:
A>Здравствуйте, debugx, Вы писали:
D>>Прочитал, спасибо. D>>Такой вопрос, в методе Dispose вызывать GC.SuppressFinalize(this) нужно только если в типе есть метод Finalize или всякий раз?
A>Finalize может быть и в потомке. Так что всегда.
Если следовать MS паттерну то Finalize нужен и вопроса бы не возникло, а если возник, то это значит речь об обёртке в которой dispose, например, для удобства использования с помощью using-а.
Как-то противоестественно не реализовывать MSпаттерн но ожидать поведения как в нём, что у наследника неявно не вызовется finalize.
Имхо нужно определиться либо-либо:
1. MS паттерн
2. класс sealed
3. забить на мелочи