9

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
[-] MotoAsh@piefed.social 2 points 6 days ago* (last edited 6 days ago)

Far more familiar with Java since I've mostly used that the last decade, but two questions come to mind...

  1. Does the console object buffer output? I know you're waiting for a key, but sometimes buffers do weird things like not flushing when you expect.
  2. Is GetType failing silently? I'm not familiar with the innards of C# any more, but in rare occasions in other languages, errors/exceptions get silently swallowed. Usually it's with funky code that amounts to a logical error and not a true magically swallowed exception, but...

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?

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

C Sharp

1749 readers
2 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