Можно ли предотвратить запуск дочернего метода с помощью return в методе базового класса при переопределении? - PullRequest
0 голосов
/ 19 февраля 2020

Это, должно быть, странный вопрос, но почему эта логика c ниже не работает?

public class Base
{
    public virtual void Method()
    {
        return;
    }
}

public class Child : Base
{
    public override void Method()
    {
        base.Method();        // If this calls 'return;' here,
        print("still here");  // then why this is still running?
    }
}

Что происходит с 'return' здесь? Почему программа его пропускает?

1 Ответ

2 голосов
/ 19 февраля 2020

Там нет return там. просто

Метод будет выполняться до тех пор, пока не достигнет return, конца метода или исключения . В вашем случае нет возврата

base.Method();         // do something
print("still here");   // do something else
// end of method, stop doing stuff

Дополнительные ресурсы

Методы (C# Руководство по программированию)

Метод - это блок кода, содержащий серию операторов. Программа заставляет операторы выполняться, вызывая метод и указывая любые обязательные аргументы метода. В C# каждая исполняемая инструкция выполняется в контексте метода.

Возвращаемые значения

Ключевое слово return также останавливает выполнение метода. Если тип возвращаемого значения void, оператор return без значения по-прежнему полезен для остановки выполнения метода. Без ключевого слова return метод перестанет выполняться, когда достигнет конца блока кода.

Отличный поясняющий комментарий от Dave S

Возврат только что возвращается из функции / метода, который вы вызвали обратно к вызывающей стороне. Возврат в вызываемой функции / методе не заставляет самого вызывающего возвращаться. Тот факт, что метод находится в базовом классе, не имеет значения.

...