На уровне IL вы, вероятно, могли бы выдать call
вместо callvirt
и выполнить работу - но если мы ограничимся C # ;-p ( edit darn! The время выполнения останавливает вас: VerificationException
: «Операция может дестабилизировать время выполнения.»; удалите virtual
, и он работает нормально; слишком умный наполовину ...)
Внутри типа ChildClass
вы можете использовать base.methodTwo()
- однако внешне это невозможно. Вы также не можете пройти более одного уровня - поддержка base.base.Foo()
отсутствует.
Однако, если вы отключите полиморфизм, используя скрытие методов, вы можете получить ответ , который вы хотите, но по плохим причинам:
class ChildClass : ParentClass
{
new public int methodTwo() // bad, do not do
{
return 2;
}
}
Теперь вы можете получить разные ответы от одного и того же объекта в зависимости от того, определена ли переменная как ChildClass
или ParentClass
.