Например, в следующей программе я хочу, чтобы entrypoint()
в A
могла вызвать doThis
в A
, но она вызывает doThis
в B, поскольку это тип экземпляра. Как я могу достичь того, чего хочу?
void Main()
{
A a = new B();
a.entrypoint();
}
public class A
{
public void entrypoint()
{
this.doThis(); //doesn't call A::doThis()
}
public virtual void doThis()
{
Console.WriteLine ("From A");
}
}
public class B : A
{
public override void doThis()
{
Console.WriteLine ("From B");
}
}
edit: Как я могу назвать "базовую реализацию" переопределенного виртуального метода? похоже, но я называю базовую реализацию из базового класса не основным.
edit: аналогично Как мы вызываем виртуальный метод из другого метода в базовом классе, даже если текущий экземпляр имеет производный класс?
Правильный способ, вероятно, состоял бы в том, чтобы не вызвать виртуальный метод, если вам нужно, чтобы он не был переопределен. Я предлагаю сделать частный метод, чтобы делать то, что вы хотите.
this.doThis()
A::doThis()