Today, another dialogue, and another episode of my ongoing series "what's the difference?"What’s the difference, if any, between a “destructor” and a “finalizer”?Both are mechanisms for cleaning up a resource when it is no longer in use. When I was asked this, at first I didn’t think there was a difference. But some Wikipedia searches turned up a difference; the term “destructor” is typically used to mean a deterministically-invoked cleanup, whereas a “finalizer” runs when the garbage collector says to run it. Doesn’t that mean that the C# spec uses the term “destructor” incorrectly?Yes, by these definitions, the C# spec gets it wrong. What we call a “destructor” in the spec is actually a finalizer, and what we call the “Dispose()” method invoked by a “using” statement is in fact a “destructor”. The CLI spec calls the finalizer by its right name.Why did the authors of the C# spec get it wrong?I don't know, but I can guess. I have two guesses. Read more: Fabulous Adventures In Coding