Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Совет
Вы новичок в разработке программного обеспечения? Сначала начните с учебников для начинающих. В этих руководствах используются инструкции верхнего уровня, которые проще для новых приложений.
Работа с существующей базой кода? Многие существующие приложения используют явный 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#.