Подтвердить что ты не робот

Почему С# использует неявный void Main?

Я не понимаю, почему функция С# Main по умолчанию недействительна (например, в проекте консоли). В C и С++ стандарт четко говорит, что main должен возвращать int, и использование возвращаемого значения имеет смысл, потому что мы можем проверить это возвращаемое значение из внешней программы и посмотреть, успешно ли завершилось приложение C/С++ или возникла ошибка.

Итак, мои вопросы:

  • Почему Visual Studio объявляет Main как void?
  • Какой лучший способ вернуть значение ОС после завершения консольного приложения С#?
4b9b3361

Ответ 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, и этот код будет возвращен в ОС всякий раз, когда ваша программа завершается нормально.