I'm not sure if it has anything to do with COM as mentioned by shriek, but it definitely does have to do with not making Object.GetType() virtual.
The second link in shriek's answer alluded to it, but this answer to another question makes it more clear:
The CLR requires that all methods that implement an interface method must be virtual (Ecma 335 Partition II Section 12.1).
- If the method in the base class is not virtual, but in the same assembly, the sneaky compiler actually makes it virtual and final.
If System.Exception
didn't shadow GetType(), the GetType() implementation for Object would automatically be converted to a virtual method by the compiler.