Предполагая, что это C #:
Вы не переопределили Foo
.Вы скрыли Foo
базового класса.Это означает, что если вы вызовете foo переменную со статическим типом B
, вы получите B.Foo()
, а вызов статического типа A
(даже если во время выполнения тип B
) даст вам A.Foo()
.
Ваш код должен выдавать предупреждение компилятора, поскольку вы скрываете базовый метод без использования ключевого слова new
.
B b = new B();
int x = b.Foo();//calls B.Foo
A a = b;//Runtime type B, compiletime type A
a.Foo(); // calls A.Foo
Если вы переопределили Foo
, тогда вы 'd B.Foo()
в обоих случаях.