Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Details about inheriting IDisposable?

Tags:

c#

idisposable

I've been tasked with going through some old code at work to clean it up and I stumbled across a class:

public class XMLLayer : Object, IDisposable

First I find that the explicit Object inheritance is unnecessary, but then I find that the dispose method is rather useless:

public void Dispose()
{
    Dispose();
}

Nowhere is an instance of XMLLayer in a using block, having its Dispose() explicitly called, or being placed in a IDisposable variable (polymorphism).

Am I wrong in assuming that the idea of the Dispose method was to add your own custom cleanup code for the class?

like image 731
Corey Ogburn Avatar asked Dec 11 '25 18:12

Corey Ogburn


2 Answers

To answer your question:

Am I wrong in assuming that the idea of the Dispose method was to add your own custom cleanup code for the class?

See the following question and its accepted answer:

Proper use of the IDisposable interface

like image 74
Kev Avatar answered Dec 14 '25 08:12

Kev


That method isn't just useless - it'll cause a StackOverflowException and terminate the app if it's ever called (or just hang that thread forever, if the JIT has made used tail recursion).

Is there anything in XMLLayer which looks like it really needs to be disposed? When C# was new, some people decided to always implement IDisposable "just in case". Fortunately that doesn't happen much these days, as far as I can see.

You should implement IDisposable if it are directly or indirectly holds an unmanaged resource - e.g. if there's a field of type Stream.

like image 24
Jon Skeet Avatar answered Dec 14 '25 08:12

Jon Skeet



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!