EDIT: Вниманию редакторов, пожалуйста, прочитайте ПОЛНЫЙ вопрос In addition, since this question is not only about disposing
.Где назвать базовый метод?
До сих пор я видел this:
protected override Dispose(bool disposing)
{
base.Dispose(disposing);
if (disposing)
c.Dispose()
}
и this:
protected virtual void Dispose(bool disposing)
{
if (!disposed)
{
if (disposing)
{
// Dispose managed resources.
}
// There are no unmanaged resources to release, but
// if we add them, they need to be released here.
}
disposed = true;
// If it is available, make the call to the
// base class's Dispose(Boolean) method
base.Dispose(disposing);
}
И Microsoft говорит CA2215: Dispose methods should call base class dispose
, here. Кроме того, поскольку этот вопрос не только об утилизации, here - еще один пример из Microsoft, вызывающего base
на последней строке.
Какая из них правильная/наиболее распространенная/лучше, если таковая имеется?
Большое вам спасибо! Не могли бы вы предоставить мне пример ссылки, или я должен предположить, что 'disposed' является полем частного класса? – Esteban
В [официальном шаблоне] (http://msdn.microsoft.com/en-us/library/fs2xkftw.aspx) 'disposed' является закрытым. Но варианты существуют. –
Я бы не стал слишком беспокоиться о попытке в конце концов. Если у ликвидатора выбрасывается исключение, то что-то глубоко ошибочно. Правильно ли иметь дело с глубоко перепутанным объектом, чтобы продолжать работать с ним? –