Destruktoren werden in C# selten verwendet, daher haben viele sie vergessen, obwohl sie wenig nützlich sind und nicht zu studieren sind.
Eins. Merkmale von Destruktoren:
Destruktoren können nur in Klassen existieren, nicht in Strukturen; Der Destruktor kann keine Modifikatoren haben, einschließlich Zugriffskontrollmodifikatoren, statischen Modifikatoren, abstrakten Modifikatoren, virtuellen Modifikatoren usw.; Der Destruktor hat keine Parameter, was bedeutet, dass es keine Überlastung geben kann.
Zwei. Wann soll der Destruktor aufgerufen werden:
Der Destruktor wird aufgerufen, wenn das Objekt vom Garbage Collector recycelt wird, aber der Garbage Collector hat eine Eigenschaft: Er ist faul, Sie recycelt die Variable nicht unmittelbar, nachdem sie den Umfang und die Lebensdauer verlassen hat, sondern nur, wenn sie es für angemessen hält, meist wenn der Speicher knapp ist. Zum Beispiel:
Nachdem die Methode btn_Click zurückgegeben hat, sollte de beendet werden, aber sein Destruktor wird nicht aufgerufen, was darauf hinweist, dass der Müllabnehmer es nicht recycelt hat; Wenn du das Formular schließt, wird der Destruktor ausgeführt, was anzeigt, dass am Ende des Programms der Garbage Collector widerwillig gezwungen ist, es zu recyceln (^-^). Natürlich können wir GC.Collect() anrufen, um das Recycling zu erzwingen:
Wenn du auf BTN1 klickst, werden de1 und neue Demo() beendet und der Destruktor wird aufgerufen. de2 hat seine Lebensdauer noch nicht abgelaufen, sodass selbst wenn die GC.Collect-Methode aufgerufen wird, sie nicht recycelt wird; wenn der btn1_Click zurückkehrt, ist de2 seine Lebensdauer abgelaufen, aber aufgrund der Faulheit des Müllholers wird er immer noch nicht recycelt; Erst wenn btn2 die GC.Collect-Methode aufruft, wird de2 zurückgewonnen und sein Destruktor aufgerufen.
Eine Möglichkeit, Destruktoraufrufe zu verhindern, ist die Implementierung der IDisposable-Schnittstelle, die eine eindeutige Methode definiert: Dispose(). Dadurch wird verhindert, dass der Destruktor intern aufgerufen wird, was bedeutet, dass Sie, wenn Sie sich langweilen, diese Schnittstelle implementieren können, ohne den GC.SuppressFinalize(^-^) aufzurufen, was bedeutungslos ist, da sie den Destruktor nicht blockiert:
Jetzt wird der Destruktor von de1 nicht mehr aufgerufen.
Drei. Das Wesen des Destruktors:
Ein Destruktor ist im Wesentlichen eine Methode, die die Form annimmt von:
Üblicherweise denken wir, dass Destruktoren nur vom System aufgerufen werden können, nicht von den Programmierern selbst, aber das ist nicht ganz richtig, und Destruktoren können auch explizit genannt werden, schließlich handelt es sich nur um eine Methode:
Destruktoren sind nur erforderlich, wenn nicht verwaltete Ressourcen in der Klasse geöffnet werden
|