Как заставить базовый класс вызывать его виртуальную функцию?

1

Например, в следующей программе я хочу, чтобы 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: аналогично Как мы вызываем виртуальный метод из другого метода в базовом классе, даже если текущий экземпляр имеет производный класс?

  • 0
    Если вы переопределите виртуальный метод в производном классе, будет вызван только переопределенный метод. Если вы не переопределите его, будет вызван метод базового класса
  • 0
    Если вы хотите вызвать функцию в базе, то она не может быть виртуальной.
Теги:

1 ответ

4

Правильный способ, вероятно, состоял бы в том, чтобы не вызвать виртуальный метод, если вам нужно, чтобы он не был переопределен. Я предлагаю сделать частный метод, чтобы делать то, что вы хотите.

  • 0
    Сделать его приватным на самом деле мне помогло, хотя я думал, что весь мой дизайн зависит от виртуальной функции.
  • 0
    Я не могу понять, почему не может быть полезно иногда вызывать версию базы и реализацию производного объекта по умолчанию во всех других случаях. Например, это не проблема в C ++, где вы просто указываете имя базового класса (даже в самой реализации базового класса), то есть вместо this.doThis() A::doThis()
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню