Ich schaue mir einen Code an und er hat folgende Aussage:
~ConnectionManager()
{
Dispose(false);
}
Die Klasse implementiert die IDisposableSchnittstelle, aber ich weiß nicht, ob dies ein Teil davon ist, für den die Tilde (~) verwendet wird.
Ich schaue mir einen Code an und er hat folgende Aussage:
~ConnectionManager()
{
Dispose(false);
}
Die Klasse implementiert die IDisposableSchnittstelle, aber ich weiß nicht, ob dies ein Teil davon ist, für den die Tilde (~) verwendet wird.
Antworten:
~ ist der Destruktor
Finalisieren
In C # führt die Finalize-Methode die Operationen aus, die ein Standard-C ++ - Destruktor ausführen würde. In C # nennen Sie es nicht Finalize - Sie verwenden die C ++ - Destruktorsyntax, um ein Tilde-Symbol (~) vor dem Namen der Klasse zu platzieren.
Entsorgen
Es ist vorzuziehen, Objekte in einer Close()oder Dispose()Methode zu entsorgen , die vom Benutzer der Klasse explizit aufgerufen werden kann. Finalize (Destruktor) werden vom GC aufgerufen.
Die IDisposable- Oberfläche teilt der Welt mit, dass Ihre Klasse über Ressourcen verfügt, die entsorgt werden müssen, und bietet Benutzern die Möglichkeit, diese freizugeben. Wenn Sie brauchen einen Finalizer in Ihrer Klasse zu implementieren, Ihre Dispose - Methode sollte die Verwendung GC.SuppressFinalize()Methode , um sicherzustellen , dass die Finalisierung Ihrer Instanz unterdrückt wird.
Was ist zu verwenden?
Es ist nicht legal, einen Destruktor explizit aufzurufen. Ihr Destruktor wird vom Garbage Collector aufgerufen. Wenn Sie wertvolle nicht verwaltete Ressourcen (z. B. Dateihandles) verarbeiten, die Sie schließen und so schnell wie möglich entsorgen möchten, sollten Sie die IDisposable-Schnittstelle implementieren.
FinalizeMethode für alle Instanzen in der Vererbungskette rekursiv aufgerufen, von den am meisten abgeleiteten bis zu den am wenigsten abgeleiteten" . Beachten Sie jedoch, dass dies nicht das gleiche Verhalten ist, das Sie von vererbbaren Destruktoren erhalten würden.
Dies ist ein Finalizer . Um ehrlich zu sein, sollten Sie sehr selten einen Finalizer schreiben müssen. Sie müssen wirklich nur eine schreiben, wenn:
IntPtr) und können diese nicht verwenden, SafeHandlewas die Arbeit erleichtertIDisposablein einer Klasse, die nicht versiegelt ist. (Ich bevorzuge es, Klassen zu versiegeln, es sei denn, sie sind für die Vererbung vorgesehen.) In solchen Fällen ist ein Finalizer Teil des kanonischen Entsorgungsmusters.Es wird verwendet, um den Destruktor für die Klasse anzugeben.
try/finallyBlock enthält, der sicherstellt, dass die übergeordnete FinalizeMethode aufgerufen wird. Die meisten Dinge, die für Destruktoren gelten, gelten für Finalisierer und umgekehrt, aber die Wörter bedeuten etwas andere Dinge.
Genau wie C ++ ist es der Destruktor. In C # wird es jedoch nicht explizit genannt. Es wird aufgerufen, wenn das Objekt gesammelt wird.
Siehe Destruktoren (C # -Programmierhandbuch) . Beachten Sie jedoch, dass der Programmierer im Gegensatz zu C ++ keine Kontrolle darüber hat, wann der Destruktor aufgerufen wird, da dies vom Garbage Collector bestimmt wird.
~ repräsentiert normalerweise einen Dekonstruktor. Dies wird ausgeführt, bevor ein Objekt stirbt.
Hier ist eine Beschreibung der C # -Dekonstruktoren, die ich gefunden habe