Warum sollten wir SuppressFinalize aufrufen, wenn wir keinen Destruktor haben

Ich habe einige Fragen, auf die ich keine richtige Antwort bekommen kann.

1) Warum sollten wir SuppressFinalize in der Dispose-Funktion aufrufen, wenn wir keinen Destruktor haben?

2) Entsorgen und Finalisieren werden verwendet, um Ressourcen freizugeben, bevor das Objekt als Müll gesammelt wird. Unabhängig davon, ob es sich um eine verwaltete oder nicht verwaltete Ressource handelt, müssen wir sie freigeben. Warum benötigen wir dann eine Bedingung in der Funktion dispose, die "pass true" sagt, wenn wir diese überschriebene Funktion von IDisposable aufrufen: "Dispose" und "pass false", wenn sie von einem Finalize aufgerufen wir

Siehe den folgenden Code, den ich aus dem Netz kopiert habe.

class Test : IDisposable
   {
     private bool isDisposed = false;

     ~Test()
     {
       Dispose(false);
     }

     protected void Dispose(bool disposing)
     {
       if (disposing)
       {
         // Code to dispose the managed resources of the class
       }
       // Code to dispose the un-managed resources of the class

       isDisposed = true;
     }

     public void Dispose()
     {
       Dispose(true);
       GC.SuppressFinalize(this);
     }
   }

was, wenn ich die boolesche geschützte Dispose-Funktion entferne und wie folgt implementiere.

   class Test : IDisposable
   {
     private bool isDisposed = false;

     ~Test()
     {
       Dispose();
     }


     public void Dispose()
     {
      // Code to dispose the managed resources of the class
      // Code to dispose the un-managed resources of the class
      isDisposed = true;

      // Call this since we have a destructor . what if , if we don't have one 
       GC.SuppressFinalize(this);
     }
   }       

Antworten auf die Frage(5)

Ihre Antwort auf die Frage