10

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
[-] airbreather@lemmy.world 1 points 3 months ago* (last edited 3 months 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).

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

C Sharp

1781 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