Если программа в качестве точки входа по-прежнему использует метод Main
int вместо void:static int
{
…
}
Теперь давайте захватим возвращаемое значение программы с помощью пакетного файла. Используя проводник Windows, перейдите в папку, где находится файл решения (например, С:\SimpleCSharpApp
SimpleCSharpApp.cmd). Поместите в файл приведенные далее инструкции (если раньше вам не приходилось создавать файлы *.cmd, то можете не беспокоиться о деталях):@echo off
rem Пакетный файл для приложения SimpleCSharpApp.exe,
rem в котором захватывается возвращаемое им значение.
dotnet run
@if "%ERRORLEVEL%" == "0" goto success
:fail
echo This application has failed!
echo return value = %ERRORLEVEL%
goto end
:success
echo This application has succeeded!
echo return value = %ERRORLEVEL%
goto end
:end
echo All Done.
Откройте окно командной подсказки (или терминал VSC) и перейдите в папку, содержащую новый файл *.cmd
Main возвращает -1. Если бы возвращалось значение 0, то вы увидели бы в окне консоли сообщение This application has succeeded!***** My First C# App *****
Hello World!
This application has failed!
return value = -1
All Done.
Ниже приведен сценарий PowerShell
*.cmd:dotnet run
if ($LastExitCode -eq 0) {
Write-Host "This application has succeeded!"
} else
{
Write-Host "This application has failed!"
}
Write-Host "All Done."
Введите PowerShell
.\SimpleCSharpApp.psl
Вот что вы увидите в терминальном окне:
***** My First C# App *****
Hello World!
This application has failed!
All Done.
В подавляющем большинстве приложений C# (если только не во всех) в качестве возвращаемого значения будет применяться void
Main или операторы верхнего уровня в этой книге (кроме текущего примера) будут возвращать void.Обработка аргументов командной строки
Теперь, когда вы лучше понимаете, что собой представляет возвращаемое значение метода Main
for языка С#. (Все итерационные конструкции языка C# более подробно рассматриваются в конце главы.)// Вывести сообщение и ожидать нажатия клавиши
Console.WriteLine("***** My First C# App *****");
Console.WriteLine("Hello World!");
Console.WriteLine;
// Обработать любые входные аргументы.
for (int i = 0; i < args.Length; i++)
{
Console.WriteLine("Arg: {0}", args[i]);
}
Console.ReadLine;
// Возвратить произвольный код ошибки,
return 0;
На заметку!
В этом примере применяются операторы верхнего уровня, т.е. методMain не задействован. Вскоре будет показано, как обновить метод Main, чтобы он принимал параметр args.Снова загляните в код IL, который сгенерирован для программы, использующей операторы верхнего уровня. Обратите внимание, что метод
args, как видно ниже (для экономии пространства код приведен с сокращениями):.class private abstract auto ansi sealed beforefieldinit '
extends [System.Runtime]System.Object
{
.custom instance void [System.Runtime]System.Runtime.CompilerServices.
CompilerGeneratedAttribute::.ctor=
( 01 00 00 00 )
Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT