Was ist der Unterschied zwischen einem Destruktor und einer Finalize-Methode in einer Klasse, wenn es einen gibt?
Ich habe kürzlich festgestellt, dass Visual Studio 2008 einen Destruktor als Synonym für eine Finalize-Methode betrachtet. Dies bedeutet, dass Sie in Visual Studio nicht beide Methoden gleichzeitig in einer Klasse definieren können.
Zum Beispiel das folgende Codefragment:
class TestFinalize
{
~TestFinalize()
{
Finalize();
}
public bool Finalize()
{
return true;
}
}
Gibt beim Aufruf von Finalize im Destruktor den folgenden Fehler aus:
Der Aufruf ist zwischen den folgenden Methoden oder Eigenschaften nicht eindeutig: 'TestFinalize. ~ TestFinalize ()' und 'TestFinalize.Finalize ()'
Wenn der Aufruf zum Finalisieren auskommentiert ist, wird der folgende Fehler ausgegeben:
Der Typ 'ManagementConcepts.Service.TestFinalize' definiert bereits ein Mitglied namens 'Finalize' mit denselben Parametertypen
quelle
Hier zu finden: http://sanjaysainitech.blogspot.com/2007/06/difference-between-destructor-dispose.html
Update: Interessanter semi-verwandter Thread hier .
quelle
You should only implement a Finalize method to clean up unmanaged resources
: Sie setzen es in Finalize. Gleiches gilt für Entsorgen?Dispose
weitaus zahlreicher als Fälle, in denen ein Finalizer implementiert werden sollte. Implementieren Sie,Dispose
wenn es wahrscheinlich ist, dass eine Instanz der Klasse oder eine abgeleitete Klasse das Letzte ist, das entweder direkt eine nicht verwaltete Ressource besitzt oder direkt das Letzte, das eine nicht verwaltete Ressource direkt besitzt, oder direkt das Letzte, das direkt besitzt usw. NurFinalize
zur Ressourcenbereinigung implementieren, wenn die eigene Klasse <i> direkt </ i> eine nicht verwaltete Ressource <i> besitzt und fast nichts anderes </ i> - ein viel engeres Szenario.