Почему C # использует неявный void Main? - PullRequest
13 голосов
/ 02 марта 2010

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

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

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

Ответы [ 8 ]

16 голосов
/ 02 марта 2010

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

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

12 голосов
/ 02 марта 2010

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

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

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

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

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

7 голосов
/ 02 марта 2010

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

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

6 голосов
/ 02 марта 2010

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

System.Environment.ExitCode = 1; // Or whatever number other than 0 for errors.
3 голосов
/ 02 марта 2010

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

2 голосов
/ 02 марта 2010

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

2 голосов
/ 02 марта 2010

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

Environment.Exit( value );

РЕДАКТИРОВАТЬ : Обратите внимание, что контекст для моего оператора был в пределах Main для консольной программы. Библиотеки и другие методы должны генерировать исключения или возвращать значения ошибок. Только ваша основная программа должна вызывать Exit. Извините, если это не ясно.

0 голосов
/ 02 марта 2010

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

...