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

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

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

  1. почему Visual Studio объявляет Main недействительным?
  2. что лучший способ вернуть значение в ОС после завершения выполнения консольного приложения C#?

8 ответов


В C#, вы можете использовать см. MSDN :

 static int Main() 
 static int Main(string[] args)
 static void Main() 
 static void Main(string[] args)

эта гибкость (путаница) также существует в C++ и наследуется от C.

вы также можете вернуть значение (int) двумя способами.

в консольном приложении я бы использовал int Main() { ...; return 2; }

в WinForms/WPF/... app, в редкой ситуации ему нужно возвращаемое значение, я бы использовал
Environment.ExitCode = 1; или Environment.Exit(1);


можно использовать int или void в качестве возвращаемого типа. Таким образом, просто измените его и возвращать значение, как в C++.

возможно, это пустота по умолчанию, чтобы не озадачивать новичков.


Это не неявно пустоту. Как и в, вы не можете просто объявить main (String[] args) и скомпилировать его как функцию void. Проекты по умолчанию объявляют main () как void, потому что проекты по умолчанию не имеют ничего полезного для возврата из main.

также стоит отметить, что C# не является C или c++. Некоторые синтаксисы одинаковы, но различия гораздо шире.


причины, по которым разработчики C#решили объявить Main как void, я не мог сказать. Что касается возврата значений в ОС после завершения работы приложения, вы можете использовать следующее:

System.Environment.ExitCode = 1; // Or whatever number other than 0 for errors.

вы можете изменить тип возврата Main без каких-либо проблем.


помните, что вокруг вашей программы есть еще одна "коробка" - CLR. Он будет возвращать коды ошибок, когда ваш код выдает необработанное исключение.


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

Environment.Exit( value );

редактировать: обратите внимание, что контекст для моего заявления был в Main для консольной программы. Библиотеки и другие методы должны вызывать исключения или возвращать ошибку ценности. Только ваша основная процедура должна вызывать Exit. Извини, если не ясно.


можно использовать Environment.Exit() для завершения и возврата целочисленного кода в ОС. Кроме того, вы можете установить Environment.ExitCode и этот код будет возвращен в ОС всякий раз, когда ваша программа завершается нормально.