Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Sugerencia
¿No está familiarizado con el desarrollo de software? Comience primero con los tutoriales de introducción . Estos tutoriales usan instrucciones de nivel superior, lo que es más sencillo para las nuevas aplicaciones.
¿Trabaja con un código base existente? Muchas aplicaciones existentes usan un método explícito Main . En este artículo se explica cómo funciona y cómo usarlo de forma eficaz.
Al iniciar una aplicación de C#, el entorno de ejecución llama al método Main. El método Main es el punto de entrada de una aplicación de C#
Un programa de C# solo puede tener un punto de entrada. Si tiene más de una clase con un Main método, debe usar la opción del compilador StartupObject al compilar el programa para especificar qué Main método actúa como punto de entrada. Para obtener más información, consulte StartupObject (opciones del compilador de C#). En el ejemplo siguiente se muestra el número de argumentos de la línea de comandos como primera acción:
class TestClass
{
static void Main(string[] args)
{
Console.WriteLine(args.Length);
}
}
Información general
El Main método es el punto de entrada de un programa ejecutable. Cuando se inicia el programa, el entorno de ejecución llama a Main antes de ejecutar cualquier otro código. Cuando Main se devuelve, finaliza el programa. Tú declaras Main siguiendo estas reglas:
- Debe declarar
Maindentro de una clase o estructura. Laclassenvolvente puede serstatic. -
Maindebe serstatic. -
Mainpuede tener cualquier modificador de acceso. -
Mainpuede devolvervoid,int,TaskoTask<int>. - Si y solo si
Maindevuelve unTasko unTask<int>, la declaración deMainpuede incluir el modificadorasync. Esta regla excluye específicamente unasync void Mainmétodo . - Puede declarar el
Mainmétodo con o sin unstring[]parámetro que contenga argumentos de línea de comandos. Cuando se usa Visual Studio para crear aplicaciones de Windows, puede agregar el parámetro manualmente o usar el GetCommandLineArgs() método para obtener los argumentos de la línea de comandos. Los parámetros son argumentos de línea de comandos sin indexación. A diferencia de C y C++, el nombre del programa no se trata como el primer argumento de línea de comandos de laargsmatriz, pero es el primer elemento del GetCommandLineArgs() método.
Las siguientes permutaciones de declaraciones de Main se muestran en la lista:
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) { }
Los ejemplos anteriores no especifican un modificador de acceso, por lo que son implícitamente private de forma predeterminada. Puede especificar cualquier modificador de acceso explícito.
En la tabla siguiente se resumen todas las firmas válidas Main y cuándo usar cada una de ellas:
Declaración Main |
Utiliza args |
contiene await |
Devuelve el código de salida. |
|---|---|---|---|
static void Main() |
No | No | No |
static int Main() |
No | No | Sí |
static void Main(string[] args) |
Sí | No | No |
static int Main(string[] args) |
Sí | No | Sí |
static async Task Main() |
No | Sí | No |
static async Task<int> Main() |
No | Sí | Sí |
static async Task Main(string[] args) |
Sí | Sí | No |
static async Task<int> Main(string[] args) |
Sí | Sí | Sí |
Elija la firma más sencilla que se adapte a sus necesidades. Si no necesita argumentos de línea de comandos, omita el string[] args parámetro . Si no necesita devolver un código de salida, use void o Task. Si necesita llamar a métodos asincrónicos, use async con un tipo de valor devuelto Task o Task<int>.
Valores devueltos por Main()
Cuando devuelve int o Task<int>, el programa puede enviar información de estado a otros programas o scripts que ejecutan el ejecutable. Un valor devuelto de 0 normalmente significa correcto y un valor distinto de cero significa que hay un error.
En el ejemplo siguiente se devuelve un código de salida:
class MainReturnValTest
{
static int Main()
{
//...
return 0;
}
}
Después de ejecutar el programa, puede comprobar el código de salida. En PowerShell, use $LastExitCode. En un archivo por lotes o script de shell, use %ERRORLEVEL%.
Si el Main método usa await, declárelo como async con un Task o Task<int> tipo de retorno. El tiempo de ejecución llama Main y espera a que se devuelva Task antes de que finalice el proceso. El tipo de valor devuelto no puede ser void o int porque el modificador async requiere un tipo de valor devuelto que el entorno de ejecución pueda esperar; void y int no representan trabajos en curso, por lo que el proceso podría finalizar antes de que se completen las operaciones asincrónicas. Use Task cuando no necesite un código de salida o Task<int> cuando haga lo siguiente:
class Program
{
static async Task<int> Main(string[] args)
{
return await AsyncConsoleWork();
}
private static async Task<int> AsyncConsoleWork()
{
return 0;
}
}
Argumentos de la línea de comandos
Incluya un string[] args parámetro en la Main declaración para aceptar argumentos de línea de comandos. Si no los necesita, omita el parámetro . El args parámetro es una String matriz que nunca es null; si no se proporciona ningún argumento, su Length valor es cero.
Puede convertir argumentos de cadena a otros tipos mediante Parse o Convert:
long num = long.Parse(args[0]);
Sugerencia
El análisis de argumentos de línea de comandos puede ser complejo. Considere la posibilidad de usar la biblioteca System.CommandLine para simplificar el proceso.
Para obtener un ejemplo de trabajo, vea Cómo mostrar argumentos de línea de comandos.
Especificación del lenguaje C#
Para obtener más información, consulte la Especificación del lenguaje C#. La especificación del lenguaje es la fuente definitiva de la sintaxis y el uso de C#.