Почему мы должны вызывать SuppressFinalize, когда у нас нет деструктора

У меня есть несколько Вопросов, на которые я не могу получить правильный ответ.

1) Почему мы должны вызывать SuppressFinalize в функции Dispose, когда у нас нет деструктора.

2) Утилизация и финализация используются для освобождения ресурсов перед сборкой мусора. Независимо от того, является ли это управляемым или неуправляемым ресурсом, нам нужно его освободить, тогда зачем нам нужно условие внутри функции dispose, говоря «pass», когда мы вызываем эту переопределенную функцию из IDisposable: Dispose и передаем false при вызове из finalize.

Смотрите ниже код, который я скопировал из сети.

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);
     }
   }

Что делать, если я удалю функцию Dispose, защищенную логическим значением, и реализую, как показано ниже.

   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);
     }
   }       

Ответы на вопрос(5)

Ваш ответ на вопрос