Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Совет
Вы новичок в разработке программного обеспечения? Сначала начните с учебников для начинающих. В этих руководствах используются инструкции верхнего уровня, которые проще для новых приложений.
Работа с существующей базой кода? Многие существующие приложения используют явный Main метод. В этой статье объясняется, как она работает и как эффективно использовать ее.
При запуске приложения C# среда выполнения вызывает Main метод. Метод Main — это точка входа приложения C#.
Программа C# может иметь только одну точку входа. Если у вас несколько классов с методом Main , при компиляции программы необходимо использовать параметр компилятора StartupObject , чтобы указать, какой Main метод служит точкой входа. Дополнительные сведения см. в разделе StartupObject (параметры компилятора C#). В следующем примере отображается число аргументов командной строки в качестве первого действия:
class TestClass
{
static void Main(string[] args)
{
Console.WriteLine(args.Length);
}
}
Обзор
Метод Main — это точка входа исполняемой программы. При запуске программы среда выполнения вызывает Main перед выполнением любого другого кода. Когда Main возвращается, программа заканчивается. Вы объявляете Main с помощью следующих правил:
- Необходимо объявить
Mainвнутри класса или структуры. Включающееclassможет бытьstatic. - Аргумент
Mainдолжен иметь значениеstatic. -
Mainможет иметь любой модификатор доступа. -
Mainможет возвращатьvoid,int,TaskилиTask<int>. - Если и только если
MainвозвращаетTaskилиTask<int>, объявлениеMainможет включать модификаторasync. Это правило специально исключаетasync void Mainметод. - Метод
Mainможно объявить с параметромstring[], содержащим аргументы командной строки, или без него. При использовании Visual Studio для создания приложений Windows можно добавить параметр вручную или использовать GetCommandLineArgs() метод для получения аргументов командной строки. Параметры — аргументы командной строки без индексирования. В отличие от C и C++, имя программы не рассматривается как первый аргумент командной строки вargsмассиве, но это первый элемент GetCommandLineArgs() метода.
В этом списке показаны пермутации объявлений Main:
static void Main() { }
static int Main() { }
static void Main(string[] args) { }
static int Main(string[] args) { }
static async Task Main() { }
static async Task<int> Main() { }
static async Task Main(string[] args) { }
static async Task<int> Main(string[] args) { }
В предыдущих примерах не указывается модификатор доступа, поэтому они неявно private по умолчанию. Можно указать любой явный модификатор доступа.
В следующей таблице перечислены все допустимые Main подписи и когда они используются.
Main декларация |
Использует args |
Содержит await |
Возвращает код выхода |
|---|---|---|---|
static void Main() |
Нет | Нет | Нет |
static int Main() |
Нет | Нет | Да |
static void Main(string[] args) |
Да | Нет | Нет |
static int Main(string[] args) |
Да | Нет | Да |
static async Task Main() |
Нет | Да | Нет |
static async Task<int> Main() |
Нет | Да | Да |
static async Task Main(string[] args) |
Да | Да | Нет |
static async Task<int> Main(string[] args) |
Да | Да | Да |
Выберите простую подпись, которая соответствует вашим потребностям. Если аргументы командной строки не нужны, опустите string[] args параметр. Если вам не нужно возвращать код выхода, используйте void или Task. Если необходимо вызвать асинхронные методы, используйте async с возвращаемым типом Task или Task<int>.
Возвращаемые значения Main()
Когда вы возвращаетесь int или Task<int>, ваша программа может отправлять сведения о состоянии в другие программы или скрипты, которые запускают исполняемый файл. Возвращаемое значение обычно означает успешность, а ненулевое значение 0 означает, что возникает ошибка.
В следующем примере возвращается код выхода:
class MainReturnValTest
{
static int Main()
{
//...
return 0;
}
}
После запуска программы можно проверить код выхода. В PowerShell используйте $LastExitCode. В пакетном файле или скрипте оболочки используйте %ERRORLEVEL%.
Если ваш метод Main использует await, объявите его как async с возвращаемым типом Task или Task<int>. Среда выполнения вызывает Main и ожидает завершения Task, прежде чем процесс завершится. Тип возвращаемого значения не может быть void или int, потому что async модификатор требует возвращаемого типа, который среда выполнения может ожидать — void и int не представляют текущую работу, из-за чего процесс может завершиться раньше, чем асинхронные операции. Используйте Task , если вам не нужен код выхода или Task<int> когда вы делаете следующее:
class Program
{
static async Task<int> Main(string[] args)
{
return await AsyncConsoleWork();
}
private static async Task<int> AsyncConsoleWork()
{
return 0;
}
}
Аргументы командной строки
Включите параметр string[] args в объявление Main, чтобы принимать аргументы командной строки. Если их не требуется, опустите параметр. Параметр args — это String массив, который никогда не имеет значения NULL, если аргументы не указаны, его Length значение равно нулю.
Строковые аргументы можно преобразовать в другие типы с помощью Parse или Convert:
long num = long.Parse(args[0]);
Совет
Анализ аргументов командной строки может быть сложным. Рекомендуется использовать библиотеку System.CommandLine для упрощения процесса.
Рабочий пример см. в разделе "Отображение аргументов командной строки".
Спецификация языка C#
Дополнительные сведения см. в спецификации языка C#. Спецификация языка является авторитетным источником синтаксиса и использования языка C#.