Рассмотрим этот пример кода:Есть ли способ указать область?
public abstract class Parent
{
public int val;
public Parent()
{
val = 0;
}
public virtual void foo()
{
inc();
}
public virtual void inc()
{
val = val + 10;
}
}
public class Child : Parent
{
public override void foo()
{
base.foo();
}
public override void inc()
{
val++;
}
}
static void Main(string[] args)
{
Parent p = new Child();
Console.WriteLine("p.val = " + p.val); //Output: p.val = 0
p.foo();
Console.WriteLine("P.val = " + p.val); //Output: p.val = 1
}
Я предполагаю, inc()
класса Parent не дозвонились, потому что {this}
указатель на самом деле указывает на объект ребенка так версия у ребенка inc()
будет вызываться из родительского объекта функция foo()
. Есть ли способ заставить функцию родителя foo()
всегда вызывать функцию родителя inc()
Как вы могли в C++ с оператором ::
?
Что делать, если Parent.inc() не объявлен как «виртуальный»? – niaher
Разве это не побеждает весь смысл наличия полиморфного foo()? Даже если вы сделали Parent :: foo() {this.inc()}, он все равно вызовет Child :: foo – StuartLC
. Я уверен, что вы можете сделать это с отражением.И, конечно, ключевое слово 'base', которое не поддерживает все поддерживаемые C++' :: '. – CodesInChaos