In one of the comments, Niall said:

“I am curious as to why the C# syntax for a finalizer is the destructor syntax. It doesn't bother me one way or another, but I am still curious.”

So I thought I'd devote a bit of time to that question.

Say I'm writing some code that wraps some sort of resource. Here's the code I might write if C# didn't support the destructor syntax (and the class already has implemented the Dispose design pattern:

class MyClass: MyBaseClass
{
    IntPtr myResource;
    ... lots of stuff here...

    protected override void Finalize()
    {
        Dispose(false);
    }

     protected override void Dispose(bool disposing)
    {
        // free myResource here...
    }
}

That seems pretty straightforward. What's wrong with the code?

The answer is the reason that we have a separate syntax. Please post your answer in the comments.