Here is a possible explanation:
When the compiler binds the method calls, it searches for the first place in the class that is the lowest in the inheritance chain (in this case, the Derived class). Instance methods are checked and matched. The overridden Foo method is not a Derived instance method, it is an instance method of the Base class.
The reason may be performance, as Jack30lena suggested, but it could also be the way the compiler interprets the intent of the encoder. This is a safe assumption that the developer assumes the behavior of the code in the code located at the bottom of the inheritance chain.
Audie Apr 30 '10 at 14:26 2010-04-30 14:26
source share