Почему С# использует неявный void Main?
Я не понимаю, почему функция С# Main
по умолчанию недействительна (например, в проекте консоли). В C и С++ стандарт четко говорит, что main должен возвращать int, и использование возвращаемого значения имеет смысл, потому что мы можем проверить это возвращаемое значение из внешней программы и посмотреть, успешно ли завершилось приложение C/С++ или возникла ошибка.
Итак, мои вопросы:
- Почему Visual Studio объявляет
Main
как void?
- Какой лучший способ вернуть значение ОС после завершения консольного приложения С#?
Ответы
Ответ 1
В С# вы можете использовать см. MSDN:
static int Main()
static int Main(string[] args)
static void Main()
static void Main(string[] args)
Эта гибкость (путаница) также существует в С++ и наследуется от C.
Вы также можете вернуть значение (int) двумя способами.
В приложении консоли я бы использовал int Main() { ...; return 2; }
В приложении WinForms/WPF/... в редкой ситуации ему нужно вернуть значение, я бы использовал
Environment.ExitCode = 1;
или Environment.Exit(1);
Ответ 2
Вы можете использовать либо int, либо void как возвращаемый тип. Таким образом, просто измените его и верните значение, как в С++.
Может быть, он по умолчанию недействителен, чтобы не начинать головоломки.
Ответ 3
Это неявно недействительно. Как и в, вы не можете просто объявить main (String [] args) и скомпилировать его как функцию void. Проекты по умолчанию объявляют main() как void, потому что проекты по умолчанию не имеют ничего полезного для возврата из main.
Также стоит отметить, что С# не является C или С++. Некоторые из синтаксиса одно и то же, но различия гораздо более широкие.
Ответ 4
Причины, по которым разработчики С# решили, что Main объявлены как void, я не мог сказать. Что касается возвращаемых значений ОС, когда приложение завершено, вы можете использовать это:
System.Environment.ExitCode = 1; // Or whatever number other than 0 for errors.
Ответ 5
Вы можете изменить тип возврата Main без каких-либо проблем.
Ответ 6
Лучший способ вернуть значение выхода - использовать. Я говорю это, потому что ненулевые коды выхода обычно используются для обозначения некоторой ошибки, обычно такой, которую вы не хотите продолжать. Вызов Exit
с ненулевым значением выхода сигнализирует об ошибке через значение и выходит из программы.
Environment.Exit( value );
EDIT. Обратите внимание: контекст для моего оператора находился в Main
для консольной программы. Библиотеки и другие методы должны генерировать исключения или возвращать значения ошибок. Только ваша основная процедура должна вызывать Exit
. Извините, если это не ясно.
Ответ 7
Помните, что есть еще одна "коробка" вокруг вашей программы - CLR. Он вернет коды ошибок, когда ваш код выдает необработанное исключение.
Ответ 8
Вы можете использовать Environment.Exit()
для завершения и возврата целочисленного кода в ОС. Кроме того, вы можете установить Environment.ExitCode
, и этот код будет возвращен в ОС всякий раз, когда ваша программа завершается нормально.