Jon\'s Brain Teasers
Here Be Spoilers...
I\'m looking at the answer to #1, and I must admit I never knew this was the case in overload resol
The reason is because it is ambiguous. The compiler just has to decide for one. And somebody thought that the less indirect one would be better (performance might be a reason). If the developer just wrote:
((Base)d).Foo (i);
it's clear and giving you the expected result.