Hello,

I have been trying to learn c# from dotnet tutorial and they gave this code which supposed to trigger garbage collector and in turn call the Destructor of the class. however when I run the same code, I get result of Constructor only and not the Destructor.

using System;
namespace DestructorExample
{
    class DestructorDemo
    {
        public DestructorDemo()
        {
            Console.WriteLine("Constructor Object Created");
        }
        ~DestructorDemo()
        {
            string type = GetType().Name;
            Console.WriteLine($"Object {type} is Destroyed");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            DestructorDemo obj1 = new DestructorDemo();
            DestructorDemo obj2 = new DestructorDemo();

            //Making obj1 for Garbage Collection
            obj1 = null;
            GC.Collect();
            Console.ReadKey();
        }
    }
}

here is the code, if you know please tell me why it’s not working

  • Mihies@programming.dev
    link
    fedilink
    English
    arrow-up
    4
    ·
    15 days ago

    OTOH gc might decide not to collect it immediately since it’s in a static method, try this instead

    DestructorDemo? obj1 = new DestructorDemo();
    //Making obj1 for Garbage Collection
    obj1 = null;
    for (int i = 0; i < 10; i++)
    {
        GC.Collect();
        GC.WaitForPendingFinalizers();
        obj1 = new DestructorDemo();
    }
    

    You’ll see destructor in action.

    • AirBreather@lemmy.world
      link
      fedilink
      arrow-up
      1
      ·
      edit-2
      15 days ago

      Conventionally (as much as the term could apply to this unconventional situation) the pattern I’ve seen has been to do a second GC.Collect(); right after the GC.WaitForPendingFinalizers();

      Otherwise yes, without running it (I’m far enough away from a PC right now) I am highly confident that this is the answer (edit to add: minus the details of the descriptions of why this is the case, which conflict with my understanding of how this stuff works).