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


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.
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 theGC.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).