Отражение позволяет увидеть, что объект d имеет метод "Foo", а также вызвать его.
Этот метод, однако, является виртуальным методом , и именно поэтому вы получаете реализацию этого метода классом Derived, поскольку это то, что есть d (в дополнение к тому, что литье на базу).
Не существует [прямого] способа вызывать виртуальные методы базы из производного объекта.
Как показано в книге Фредерика Хамиди, метод базового класса может быть предоставлен классом Derived (под другим именем), но это на самом деле не вызывает метод Base, он вызывает метод класса Derived, который вызывает метод Base способ.
Хотя этот подход, заключающийся в том, что класс Derived предоставляет «прокси» для метода базового класса, в конечном итоге делает то, о чем вы просите, вероятно, это плохая идея: вероятно, в вашей структуре есть недостаток объектная модель: это был бы довольно странный вариант использования ...