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


Some ideas:
It’s been a long time since I used Java and C# but you were not supposed to write destructors, or “close objects” improperly by setting a null value, or calling collect explicitly.
Also you’re blocking the application with ReadKey to trick the terminal into keeping the window open. That could prevent the GC from working at this specific step because the main function is not over yet. Configure the IDE instead to keep the terminal open, and remove ReadKey.
Calling collect is only a piece of advice to the GC, it could wait after you press the key but you wouldn’t see it if the terminal closes too fast.
GC.Collect runs in a different thread and it is not blocked by waiting on terminal. And calling Collect is not just a piece of advice, it starts collection. And yes, usually one does not call Collect unless it knows why (there are cases it makes sense), but setting reference to null doesn’t hurt (but doesn’t help probably). As per destructors, those are for freeing unmanaged resources only.
(not OP) I had a similar thought but it turns out GC.Collect() is a blocking collect.
Whether that means it will actually destroy the objects fully before it returns… I’d think so based on the description, but I’ve definitely seen worse lies in documentation!