I get the need to clean up resources during the teardown of an object, but I have always found the differences between Dispose, Finalize, and the destructor methods a bit confusing.
I found this great article that concisely describes the distinctions between them, that I am going to have to save for future reference:
"Difference between Destructor, Dispose and Finalize methods" - Sanjay Saini
http://sanjaysainitech.blogspot.com/2007/06/difference-between-destructor-dispose.html
The fundamental question I am trying to ask here is this.
If a language offers destructors (for example C# [refuted]) what value do Dispose and Finalize add to the equation?
Am I just a curmudgeon that is used to the old school way of doing everything in the destructor, or is there something I am missing that is only possible by breaking the tear-down of an object into three parts?
UPDATE:
As noted in some of the replies, C# does not actually have destructors. The question may be moot at this point in recognition of that. When I read in the above referenced article that C# actually had a separate deconstructor (an error apparently), it threw me for a loop and I started wondering what the point of Dispose and Finalize would be if you had a final destructor to wrap up everything. I suppose that in a GC langauge like C# the concept of a single destructor to provide the denemount for an object doesn't make much sense.
Sorry for the downvotes on some of you guys, but a couple people didn't read the question carefully and thought I was asking about the difference between Dispose and Finalize, which really wasn't the point.