~ ist die destructor
- Destructors automatisch aufgerufen werden, und nicht explizit aufgerufen werden kann.
- Destruktoren können nicht überlastet werden. Daher kann eine Klasse höchstens einen Destruktor haben.
- Destruktoren werden nicht vererbt. Daher hat eine Klasse keine anderen Destruktoren als die eine, die darin deklariert werden kann.
- Destruktoren können nicht mit Strukturen verwendet werden. Sie werden nur mit Klassen verwendet. Eine Instanz kann vernichtet werden, wenn Code nicht mehr für die Instanz verwendet werden kann.
- Die Ausführung des Destruktors für die Instanz kann jederzeit erfolgen, nachdem die Instanz für die Zerstörung infrage kommt.
- Wenn eine Instanz zerstört wird, werden die Destruktoren in ihrer Vererbungskette in der Reihenfolge von den meisten abgeleiteten zu den am wenigsten abgeleiteten aufgerufen.
Finalisierung
In C#, führt die Finalisierung Verfahren die Operationen, die ein Standard-C++ destructor tun würde. In C# nennen Sie es nicht Finalize - Sie verwenden die C++ - Destruktorsyntax, indem Sie ein Tilde (~) vor dem Namen der Klasse platzieren.
Entsorgen
Es wird bevorzugt von Objekten in einer Close()
oder Dispose()
Methode zu verfügen, die explizit durch den Benutzer der Klasse aufgerufen werden kann. Finalize (Destruktor) werden vom GC aufgerufen.
Die Schnittstelle IDisposable teilt der Welt mit, dass Ihre Klasse Ressourcen enthält, die entsorgt werden müssen, und bietet Benutzern die Möglichkeit, sie zu veröffentlichen. Wenn Sie in Ihrer Klasse einen Finalizer implementieren müssen, sollte Ihre Dispose-Methode die Methode GC.SuppressFinalize()
verwenden, um sicherzustellen, dass die Finalisierung Ihrer Instanz unterdrückt wird.
Was zu verwenden?
Es ist nicht erlaubt, einen Destruktor explizit aufzurufen. Ihr Destruktor wird vom Garbage Collector aufgerufen. Wenn Sie wertvolle nicht verwaltete Ressourcen (z. B. Dateihandles) verwalten, die Sie so schnell wie möglich schließen und löschen möchten, sollten Sie die IDisposable-Schnittstelle implementieren.
Ich weiß nicht, wie es früher war. Aber jetzt werden Destruktoren vererbt. Überprüfen Sie diesen Link für weitere Informationen (siehe das Beispiel am Ende): http://msdn.microsoft.com/en-us/library/66x5fx1b.aspx – RononDex
@RononDex Punkt 3 der gleichen Seite, die Sie mit den Staaten verknüpfen * "Finalizer kann nicht vererbt werden "*, was Ihrem Kommentar widerspricht. Es ist zugegebenermaßen ein wenig verwirrend, da sie zwar nicht vererbt werden können, aber die "Finalize" -Methode rekursiv für alle Instanzen in der Vererbungskette aufgerufen wird, von den am meisten abgeleiteten zu den am wenigsten abgeleiteten "*". Beachten Sie, dass das * nicht * das gleiche Verhalten ist wie bei vererbbaren Destruktoren. –
@MarkAmery ah Ich sehe, also im Grunde werden sie in der umgekehrten Reihenfolge aufgerufen, im Vergleich zu etwas, das vererbt wird? – RononDex