IDisposable для базового класса и потомка
От: debugx Россия http://oignatov.blogspot.com
Дата: 07.10.10 08:47
Оценка:
Всем привет,
Есть базовый класс, выполняющий интерфейс 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();
}

#endregion
}

Так правильно делать?
Re: IDisposable для базового класса и потомка
От: adontz Грузия http://adontz.wordpress.com/
Дата: 07.10.10 08:49
Оценка: 10 (1)
Здравствуйте, debugx, Вы писали:

D>Так правильно делать?


http://msdn.microsoft.com/en-us/library/fs2xkftw.aspx
http://msdn.microsoft.com/en-us/library/b1yfkh5e%28v=VS.100%29.aspx
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[2]: IDisposable для базового класса и потомка
От: debugx Россия http://oignatov.blogspot.com
Дата: 07.10.10 09:55
Оценка:
Здравствуйте, adontz, Вы писали:

A>Здравствуйте, debugx, Вы писали:


D>>Так правильно делать?


A>http://msdn.microsoft.com/en-us/library/fs2xkftw.aspx

A>http://msdn.microsoft.com/en-us/library/b1yfkh5e%28v=VS.100%29.aspx

Прочитал, спасибо.
Такой вопрос, в методе Dispose вызывать GC.SuppressFinalize(this) нужно только если в типе есть метод Finalize или всякий раз?
Re[3]: IDisposable для базового класса и потомка
От: chocho Россия  
Дата: 07.10.10 10:12
Оценка:
Здравствуйте, debugx, Вы писали:

D>Здравствуйте, adontz, Вы писали:


A>>Здравствуйте, debugx, Вы писали:


D>>>Так правильно делать?


A>>http://msdn.microsoft.com/en-us/library/fs2xkftw.aspx

A>>http://msdn.microsoft.com/en-us/library/b1yfkh5e%28v=VS.100%29.aspx

D>Прочитал, спасибо.

D>Такой вопрос, в методе Dispose вызывать GC.SuppressFinalize(this) нужно только если в типе есть метод Finalize или всякий раз?

Finalize неявно не создаётся, так что если его нет, то не нужно и саппресить.
"Не морочьте мне голову. Полыхаев" ©
Re[3]: IDisposable для базового класса и потомка
От: adontz Грузия http://adontz.wordpress.com/
Дата: 07.10.10 11:24
Оценка: 5 (1)
Здравствуйте, debugx, Вы писали:

D>Прочитал, спасибо.

D>Такой вопрос, в методе Dispose вызывать GC.SuppressFinalize(this) нужно только если в типе есть метод Finalize или всякий раз?

Finalize может быть и в потомке. Так что всегда.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[4]: IDisposable для базового класса и потомка
От: chocho Россия  
Дата: 07.10.10 15:09
Оценка:
Здравствуйте, adontz, Вы писали:

A>Здравствуйте, debugx, Вы писали:


D>>Прочитал, спасибо.

D>>Такой вопрос, в методе Dispose вызывать GC.SuppressFinalize(this) нужно только если в типе есть метод Finalize или всякий раз?

A>Finalize может быть и в потомке. Так что всегда.


Если следовать MS паттерну то Finalize нужен и вопроса бы не возникло, а если возник, то это значит речь об обёртке в которой dispose, например, для удобства использования с помощью using-а.
Как-то противоестественно не реализовывать MSпаттерн но ожидать поведения как в нём, что у наследника неявно не вызовется finalize.

Имхо нужно определиться либо-либо:
1. MS паттерн
2. класс sealed
3. забить на мелочи
"Не морочьте мне голову. Полыхаев" ©
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.