В чем разница, если она есть, между деструктором и методом Finalize в классе?
Недавно я обнаружил, что Visual Studio 2008 считает деструктор синонимом метода Finalize, а это означает, что Visual Studio не позволит вам одновременно определять оба метода в классе.
Например, следующий фрагмент кода:
class TestFinalize
{
~TestFinalize()
{
Finalize();
}
public bool Finalize()
{
return true;
}
}
Выдает следующую ошибку при вызове Finalize в деструкторе:
Вызов неоднозначен для следующих методов или свойств: TestFinalize. ~ TestFinalize () и TestFinalize.Finalize ()
А если закомментировать вызов Finalize, он выдает следующую ошибку:
Тип ManagementConcepts.Service.TestFinalize уже определяет член с именем Finalize с теми же типами параметров.
источник
Найдено здесь: http://sanjaysainitech.blogspot.com/2007/06/difference-between-destructor-dispose.html
Обновление: здесь интересная полусвязанная ветка .
источник
You should only implement a Finalize method to clean up unmanaged resources
: вы положили его в Finalize. То же самое с Dispose?Dispose
намного больше, чем тех, где нужно реализовать финализатор. Реализуйте,Dispose
если существует вероятность, что экземпляр класса или производного класса будет последним, кто будет либо напрямую владеть неуправляемым ресурсом, либо напрямую владеть последней вещью, чтобы напрямую владеть неуправляемым ресурсом, либо напрямую владеть последней вещью, которой напрямую владеть и т. д.Finalize
Выполняйте очистку ресурсов только в том случае, если один класс <i> напрямую </i> владеет неуправляемым ресурсом <i> и почти ничем другим </i> - гораздо более узкий сценарий.