Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю - Страница 48
- Предыдущая
- 48/642
- Следующая
Очевидно, что выбор способа создания метода
Main()Main()intvoidMain()Использование операторов верхнего уровня (нововведение в версии 9.0)
Хотя и верно то, что до выхода версии C# 9.0 все приложения .NET Core на языке C# обязаны были иметь метод
Main()ProgramMain()Program.csusing System;// Отобразить пользователю простое сообщение.Console.WriteLine(***** Му First C# Арр *****);Console.WriteLine("Hello World!");Console.WriteLine();// Ожидать нажатия клавиши <Enter>, прежде чем завершить работу.Console.ReadLine();Запустив программу, вы увидите, что получается тот же самый результат! Существует несколько правил применения операторов верхнего уровня.
• Операторы верхнего уровня можно использовать только в одном файле внутри приложения.
• В случае применения операторов верхнего уровня программа не может иметь объявленную точку входа.
• Операторы верхнего уровня нельзя помещать в пространство имен.
• Операторы верхнего уровня по-прежнему имеют доступ к строковому массиву аргументов.
• Операторы верхнего уровня возвращают код завершения приложения (как объясняется в следующем разделе) с использованием
return• Функции, которые объявлялись в классе
Program• Дополнительные типы можно объявлять после всех операторов верхнего уровня. Объявление любых типов до окончания операторов верхнего уровня приводит к ошибке на этапе компиляции.
"За кулисами" компилятор заполняет пробелы. Исследуя сгенерированный код IL для обновленного кода, вы заметите такое определение
TypeDef// TypeDef #1 (02000002)// -------------------------------------------------------//   TypDefName: <b><Program>$</b>  (02000002)//   Flags     : [NotPublic] [AutoLayout] [Class] [Abstract] [Sealed] [AnsiClass]      [BeforeFieldInit]  (00100180)//   Extends   : 0100000D [TypeRef] System.Object//   Method #1 (06000001) [ENTRYPOINT]//   -------------------------------------------------------//          <b>MethodName: <Main>$ (06000001)</b>Сравните его с определением
TypeDef// -------------------------------------------------------// TypDefName: <b>CalculatorExamples.Program</b>  (02000002)//   Flags     : [NotPublic] [AutoLayout] [Class] [AnsiClass]      [BeforeFieldInit]  (00100000)//   Extends   : 0100000C [TypeRef] System.Object//   Method #1 (06000001) [ENTRYPOINT]//   -------------------------------------------------------//          <b>MethodName: Main (06000001)</b>В примере из главы 1 обратите внимание, что значение
TypDefNameCalculatorExamplesProgramMethodNameMain<Program>$TypDefName<Main>$Указание кода ошибки приложения (обновление в версии 9.0)
Хотя в подавляющем большинстве случаев методы
Main()voidintTask<int>0-10Main()voidПри использовании операторов верхнего уровня (следовательно, в отсутствие метода
Main()0Main()В ОС Windows возвращаемое приложением значение сохраняется в переменной среды по имени
%ERRORLEVEL%%ERRORLEVEL%ExitCode- Предыдущая
- 48/642
- Следующая
 
                        