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