Frage

Ich suche etwas Code an und es hat diese Aussage:

~ConnectionManager()
{
    Dispose(false);
}

Die Klasse implementiert die IDisposable Schnittstelle, aber ich weiß nicht, ob das ein Teil davon ist die Tilde (~) für verwendet wird.

War es hilfreich?

Lösung

~ ist der destructor

  1. Destruktoren werden automatisch aufgerufen und kann nicht explizit aufgerufen werden.
  2. Destruktoren können nicht überlastet werden. Somit kann eine Klasse, höchstens ein destructor.
  3. Destruktoren werden nicht vererbt. Somit ist eine Klasse hat keine Destruktoren andere als die, die in ihm erklärt werden kann.
  4. Destruktoren können nicht mit Strukturen verwendet werden. Sie werden nur mit Klassen verwendet. Eine Instanz wird für die Vernichtung berechtigt, wenn es nicht mehr möglich ist, jeder Code die Instanz zu verwenden.
  5. Die Ausführung des destructor für die Instanz jederzeit nach dem Fall auftreten kann, wird für die Zerstörung in Betracht.
  6. Wenn eine Instanz zerstört ist, werden die Destruktoren in seiner Vererbungskette genannt, um, von den meisten abgeleitet dest abgeleitet.

Finalisierung

In C # führt die Finalisierung Verfahren die Operationen, die ein Standard-C ++ destructor tun würde. In C #, Sie nennen Sie es nicht finalisieren - Sie verwenden, um die C ++ destructor Syntax eine Tilde platzieren (~) Symbol vor dem Namen der Klasse.

Entsorgen

Es ist bevorzugt von Objekten in einer Close() oder Dispose() Methode zu verfügen, die explizit durch den Benutzer der Klasse aufgerufen werden kann. Finalisieren (destructor) werden durch die GC genannt.

Die IDisposable Schnittstelle sagt der Welt, die Ihre Klasse auf Ressourcen enthält, die entsorgt werden müssen, und bietet dem Anwender eine Möglichkeit, sie zu lösen. Wenn Sie einen Finalizer in Ihrer Klasse implementieren müssen, Ihre Dispose-Methode sollte verwenden, um die GC.SuppressFinalize() Methode, dass Abschluss der Instanz, um sicherzustellen, wird unterdrückt.

Was zu benutzen?

Es ist nicht zulässig, einen Destruktor explizit zu nennen. Ihr destructor wird vom Garbage Collector aufgerufen werden. Wenn Sie wertvolle nicht verwalteten Ressourcen tun behandeln (wie Datei-Handles), die Sie schließen möchten, und entsorgen Sie so schnell wie möglich, sollten Sie die IDisposable-Schnittstelle implementieren.

Andere Tipps

Dies ist ein Finalizerthread . Um ehrlich zu sein, sollten Sie sehr selten einen Finalizer schreiben müssen. Sie müssen wirklich nur ein, wenn schreiben:

  • Sie haben direkten Zugriff auf eine nicht verwaltete Ressource (zum Beispiel durch eine IntPtr) und Sie können nicht SafeHandle verwenden, die es einfacher
  • macht
  • Sie implementieren IDisposable in einer Klasse, die nicht abgedichtet ist. (Meine Präferenz ist Klassen zu versiegeln, wenn sie nicht für die Vererbung entworfen wurde.) Ein Finalizerthread Teil des kanonischen Entsorgen Muster in einem solchen Fall ist.

Es wird verwendet, den destructor für die Klasse anzuzeigen.

Die gleichen wie C ++, es ist der destructor; aber in C # Sie es nicht explizit genannt, es wird aufgerufen, wenn das Objekt gesammelt wird.

Siehe Destruktoren (C # -Programmierhandbuch) . Beachten Sie jedoch, dass, im Gegensatz zu C ++, Programmierer hat keine Kontrolle über, wenn der Destruktor aufgerufen wird, da dies vom Garbage Collector bestimmt wird.

~ stellt in der Regel eine Deconstructor. welches nach rechts laufen, bevor ein Objekt stirbt.

Hier eine Beschreibung von C # deconstructors i gefunden

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top