Being a .NET Developer, you must have basic information about Garbage Collector. Garbage Collector is a boon for .Net developers which takes care of memory management for .NET programs in the background.
But as we know that there are some limitations as well. Garbage collector can collect only managed object. So what about unmanaged objects. Garbage collector cannot clean up unmanaged object properly because these object are not limited to .NET framework and CLR does not have complete control on it. So it is developer’s responsibility to clean up unmanaged resources. It is advised to override the Finalize method (that is a virtual method in Object class) to clean up the unmanaged resources. Garbage collector calls the finalize method of each object (which has overridden Finalize method) while collection process.
So have you ever tried to override the Finalize method in C#? Let’s do that
public class MyClass { protected override void Finalize() { // Do unmanaged resource clean up } }
For simplicity, I just override the Finalize method. Now let’s build the code.
Ohh.. The above code does not build. It gives the following errorSo if you see the error, it says that do not override Finalize. Instead use destructor.
It means We cannot override Finalize directly in C#.
So what is other way? As in error it suggests to provide destructor. So let us write the destructor (destructor in any class starts with tilde (~)). So now my class looks like
public class MyClass { ~MyClass() { // Do unmanaged resource clean up Console.WriteLine("In destructor"); } }
Now let’s build it.
It builds successfully. Now let’s see this class using assembly Reflector.
So here our destructor turned into Finalize method. So it means that destructor and Finalize are same in C#. But obviously while writing code in C#, it does not allow to override the Finalize method so we have only option to write destructor for that.
So don’t get confused ever if you see somewhere that say to override Finalize and you are not able to override it. Instead use destructor for that purpose.
Cheers,
Brij
