Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Gorjeta
Novo no desenvolvimento de software? Começa primeiro pelos tutoriais para começar . Esses tutoriais usam instruções de topo, o que é mais simples para aplicações novas.
A trabalhar com uma base de código já existente? Muitas aplicações existentes utilizam um método explícito Main . Este artigo explica como funciona e como utilizá-lo de forma eficaz.
Quando inicias uma aplicação C#, o runtime chama o Main método. O Main método é o ponto de entrada de um aplicativo C#.
Um programa de C# só pode ter um ponto de entrada. Se tiver mais do que uma classe com um Main método, deve usar a opção compilador StartupObject ao compilar o seu programa para especificar qual Main o método que serve como ponto de entrada. Para obter mais informações, consulte StartupObject (C# Compiler Options). O exemplo seguinte mostra o número de argumentos da linha de comandos como a sua primeira ação:
class TestClass
{
static void Main(string[] args)
{
Console.WriteLine(args.Length);
}
}
Descrição geral
O Main método é o ponto de entrada de um programa executável. Quando o teu programa inicia, o runtime é chamado Main antes de qualquer outro código ser executado. Quando Main regressa, o programa termina. Declaras Main com estas regras:
- Deve declarar-se
Mainnuma classe ou estrutura. O anexoclasspode serstatic. -
Maindeve serstatic. -
MainPode ter qualquer modificador de acesso. -
Mainpode devolvervoid,int,Task, ouTask<int>. - Se e somente se
Mainretornar aTaskouTask<int>, a declaração deMainpode incluir oasyncmodificador. Esta regra exclui especificamente umasync void Mainmétodo. - Pode declarar o
Mainmétodo com ou sem umstring[]parâmetro que contenha argumentos de linha de comandos. Quando usa o Visual Studio para criar aplicações Windows, pode adicionar o parâmetro manualmente ou então usar o GetCommandLineArgs() método para obter os argumentos da linha de comandos. Os parâmetros são argumentos de linha de comandos indexados a zero. Ao contrário de C e C++, o nome do programa não é tratado como o primeiro argumento de linha de comando naargsmatriz, mas é o GetCommandLineArgs() primeiro elemento do método.
A lista seguinte mostra as permutações das Main declarações:
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) { }
Os exemplos anteriores não especificam um modificador de acesso, portanto, eles são implicitamente private por padrão. Podes especificar qualquer modificador de acesso explícito.
A tabela seguinte resume todas as assinaturas válidas Main e quando usar cada uma:
Main Declaração |
Utilizações args |
contém await |
Devolve o código de saída |
|---|---|---|---|
static void Main() |
No | No | No |
static int Main() |
No | No | Sim |
static void Main(string[] args) |
Sim | No | No |
static int Main(string[] args) |
Sim | No | Sim |
static async Task Main() |
No | Sim | No |
static async Task<int> Main() |
No | Sim | Sim |
static async Task Main(string[] args) |
Sim | Sim | No |
static async Task<int> Main(string[] args) |
Sim | Sim | Sim |
Escolha a assinatura mais simples que se adeque às suas necessidades. Se não precisares de argumentos de linha de comandos, omite o string[] args parâmetro. Se não precisares de devolver um código de saída, usa void ou Task. Se precisar de chamar métodos assíncronos, use async com um tipo de Task ou Task<int> retorno.
Valores de retorno Main()
Quando retorna int ou Task<int>, o seu programa pode enviar informações de estado para outros programas ou scripts que executam o executável. Um valor de retorno de 0 normalmente significa sucesso, e um valor diferente de zero significa que há um erro.
O exemplo seguinte devolve um código de saída:
class MainReturnValTest
{
static int Main()
{
//...
return 0;
}
}
Depois de executar o programa, pode verificar o código de saída. No PowerShell, usa $LastExitCode. Num ficheiro em lotes ou num script shell, use %ERRORLEVEL%.
Se o seu Main método usa await, declare-o como async com um Task ou Task<int> tipo de retorno. O runtime chama Main e espera que o retorno Task seja concluído antes de o processo sair. O tipo de retorno não pode ser void ou int porque o async modificador exige um tipo de retorno que o tempo de execução pode aguardar —void e int não representa trabalho em curso, pelo que o processo pode sair antes do término das operações assíncronas.
Task Use quando não precisar de um código de saída, ou Task<int> quando precisares:
class Program
{
static async Task<int> Main(string[] args)
{
return await AsyncConsoleWork();
}
private static async Task<int> AsyncConsoleWork()
{
return 0;
}
}
Argumentos de linha de comando
Inclua um string[] args parâmetro na sua Main declaração para aceitar argumentos de linha de comandos. Se não precisares deles, omite o parâmetro. O args parâmetro é um String array que nunca é nulo — se não forem fornecidos argumentos, é Length zero.
Pode converter argumentos de cadeia para outros tipos usando Parse ou Convert:
long num = long.Parse(args[0]);
Gorjeta
A análise de argumentos de linha de comando pode ser complexa. Considere usar a biblioteca System.CommandLine para simplificar o processo.
Para um exemplo prático, veja Como mostrar argumentos de linha de comandos.
Especificação da linguagem C#
Para obter mais informações, consulte a Especificação da Linguagem C# . A especificação da linguagem é a fonte definitiva para a sintaxe e o uso do C#.