Поведение, которое вы запрашиваете, распространено в процедурном программировании, где у вас есть общий линейный программный поток от самой первой строки до самой последней.Это будет применяться к построчному выполнению, а это не то, о чем ООП.Есть веские причины, по которым мы обычно не рекомендуем использовать goto
и другие вещи, которые контролируют ход программы, поскольку это усложнит отслеживание вашего кода, например, при отладке.На самом деле это приводит к спагетти-коду.
Представьте, что вы хотите отладить приложение через несколько месяцев.Вы перебираете свой код до тех пор, пока не достигнете Foo
, войдете в него, чтобы понять, что он делает, и - ооо, что это такое - ваш отладчик выпрыгивает из Foo
по любой причине.Совершенно неясно , почему метод просто останавливает свое выполнение.
То, что вы, похоже, действительно хотите, - это выполнить некоторые проверки вашего пользовательского ввода.Поэтому, если ваш пользователь вводит отрицательное число, ваша программа должна остановиться.В этом случае можно просто сгенерировать исключение, которое в основном указывает на то, что метод не может делать то, что должен делать.Вы можете просто создать какой-нибудь Validate
-метод, который генерирует исключение для недействительного ввода:
void Validate(int x)
{
if(x <= 0)
throw new InvalidArgumentException("x must not be negative");
}
Это оставляет вызывающему методу метод обработки ошибки.Таким образом, ваш Validate
-метод просто проверяет ввод.Он не должен завершать вызывающий метод, который нарушил бы принцип единственной ответственности, не так ли?
Однако создание исключения в вашем случае кажется чем-то вроде взятия кувалды всломать орехСамый простой и чистый способ - делать именно то, что вы хотите избежать.Иметь оператор if, который завершает foo
, если ввод неверен:
void foo()
{
if(!Validate(x))
return;
}
bool Validate(int x)
{
return x > 0;
}