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


Far more familiar with Java since I’ve mostly used that the last decade, but two questions come to mind…
At least GC.Collect() is a blocking collect, but perhaps there could also be funky shenanigans happening? I’d also think it’d collect obj1, but it is still in the same scope it was created in. Maybe there could also be some funkyness there with objects only getting picked up if they’re out of scope or similar?
I’d imagine most of the above would be really easy to test if you can get a debugger to step through. If it doesn’t hit at all, something odd is happening with flagging the objects for collection I’d think. If it hits but errors, easy peasy. If it hits and executes fine but doesn’t show, maybe as others suggested, use a different function rather than something from Console or something?