~Finalizer versus Finalize()

Beschreibungen des Finalizer in C# weisen in der Regel darauf hin, dass es sich dabei um eine normale Methode handelt - die aber zwingend die Finalize() Methode der Basis Klasse aufrufen muss.

public class Foo
{
  protected void Finalize()
  {
    base.Finalize();
  }
}

Wird der Finalizer jedoch im Stile eines C++ Destruktors geschrieben erfolgt der Aufruf des Finalizers der Basisklasse automatisch.

public class Foo
{
  // Selber Name wie die Klasse und mit dem Prefix ~(Tilde)
  ~Foo(){}
}

C# Destruktoren:

  • Werden nicht vererbt und daher auch nicht überladen werden
  • Leere Parameterliste
  • Keine Zugriffsbestimmung
  • Impliziter Rückgabewert ist void