Jaka jest różnica między destruktorem a metodą Finalize w klasie, jeśli taki istnieje?
Niedawno odkryłem, że program Visual Studio 2008 uważa destruktor za synonim metody Finalize, co oznacza, że program Visual Studio nie pozwala na jednoczesne definiowanie obu metod w klasie.
Na przykład następujący fragment kodu:
class TestFinalize
{
~TestFinalize()
{
Finalize();
}
public bool Finalize()
{
return true;
}
}
Daje następujący błąd w wywołaniu Finalize w destruktorze:
Wywołanie jest niejednoznaczne między następującymi metodami lub właściwościami: „TestFinalize. ~ TestFinalize ()” i „TestFinalize.Finalize ()”
A jeśli wywołanie Finalize jest zakomentowane, powoduje następujący błąd:
Typ „ManagementConcepts.Service.TestFinalize” już definiuje element członkowski o nazwie „Finalize” z tymi samymi typami parametrów
źródło
Znaleziono tutaj: http://sanjaysainitech.blogspot.com/2007/06/difference-between-destructor-dispose.html
Aktualizacja: Ciekawy wątek częściowo powiązany .
źródło
You should only implement a Finalize method to clean up unmanaged resources
: umieściłeś to w Finalize. To samo z Dispose?Dispose
znacznie więcej niż te, w których należy zaimplementować finalizator. Zaimplementuj,Dispose
jeśli jest prawdopodobne, że instancja klasy lub klasy pochodnej będzie ostatnią rzeczą, która będzie bezpośrednio posiadać niezarządzany zasób lub bezpośrednio posiadasz ostatnią rzecz, aby bezpośrednio posiadać niezarządzany zasób lub bezpośrednio posiadać ostatnią rzecz, która ma być bezpośrednio właścicielem itd. Stosuj tylkoFinalize
do czyszczenia zasobów, jeśli klasa <i> bezpośrednio </i> posiada niezarządzany zasób <i> i prawie nic więcej </i> - znacznie węższy scenariusz.