this post was submitted on 16 Dec 2025
9 points (100.0% liked)

C Sharp

1750 readers
1 users here now

A community about the C# programming language

Getting started

Useful resources

IDEs and code editors

Tools

Rules

Related communities

founded 2 years ago
MODERATORS
 

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

you are viewing a single comment's thread
view the rest of the comments
[โ€“] Mihies@programming.dev 4 points 1 week ago (1 children)

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 1 points 1 week ago* (last edited 1 week 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).