Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Conseil
Vous débutez avec le développement de logiciels ? Commencez par commencer par les didacticiels De prise en main . Ces didacticiels utilisent des instructions de niveau supérieur, ce qui est plus simple pour les nouvelles applications.
Utilisation d’une base de code existante ? De nombreuses applications existantes utilisent une méthode explicite Main . Cet article explique comment il fonctionne et comment l’utiliser efficacement.
Lorsque vous démarrez une application C#, le runtime appelle la Main méthode. La méthode Main est le point d’entrée d’une application C#.
Un programme C# ne peut avoir qu’un seul point d’entrée. Si vous avez plusieurs classes avec une Main méthode, vous devez utiliser l’option du compilateur StartupObject lorsque vous compilez votre programme pour spécifier la Main méthode qui sert de point d’entrée. Pour plus d’informations, consultez StartupObject (Options du compilateur C#). L’exemple suivant affiche le nombre d’arguments de ligne de commande comme première action :
class TestClass
{
static void Main(string[] args)
{
Console.WriteLine(args.Length);
}
}
Vue d’ensemble
La Main méthode est le point d’entrée d’un programme exécutable. Au démarrage de votre programme, le runtime appelle Main avant l’exécution d’un autre code. Lorsque Main retourne, le programme se termine. Vous déclarez Main avec ces règles :
- Vous devez déclarer
Mainà l’intérieur d’une classe ou d’un struct. L'élément englobantclasspeut êtrestatic. -
Maindoit êtrestatic. -
Mainpeut avoir n’importe quel modificateur d’accès. -
Mainpeut retournervoid,intTaskouTask<int>. - Si et seulement si
Mainretourne uneTaskouTask<int>, la déclaration deMainpeut inclure leasyncmodificateur. Cette règle exclut spécifiquement uneasync void Mainméthode. - Vous pouvez déclarer la
Mainméthode avec ou sansstring[]paramètre qui contient des arguments de ligne de commande. Lorsque vous utilisez Visual Studio pour créer des applications Windows, vous pouvez ajouter le paramètre manuellement ou utiliser la GetCommandLineArgs() méthode pour obtenir les arguments de ligne de commande. Les paramètres sont des arguments de ligne de commande indexés zéro. Contrairement à C et C++, le nom du programme n’est pas traité comme le premier argument de ligne de commande dans leargstableau, mais il s’agit du premier élément de la GetCommandLineArgs() méthode.
La liste suivante présente les permutations des Main déclarations :
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) { }
Les exemples précédents ne spécifient pas de modificateur d’accès. Ils sont donc implicitement private par défaut. Vous pouvez spécifier n’importe quel modificateur d’accès explicite.
Le tableau suivant récapitule toutes les signatures valides Main et quand utiliser chacun d’eux :
Déclaration Main |
Utilise args |
Contient await |
Retourne le code de sortie |
|---|---|---|---|
static void Main() |
Non | Non | Non |
static int Main() |
Non | Non | Oui |
static void Main(string[] args) |
Oui | Non | Non |
static int Main(string[] args) |
Oui | Non | Oui |
static async Task Main() |
Non | Oui | Non |
static async Task<int> Main() |
Non | Oui | Oui |
static async Task Main(string[] args) |
Oui | Oui | Non |
static async Task<int> Main(string[] args) |
Oui | Oui | Oui |
Choisissez la signature la plus simple qui correspond à vos besoins. Si vous n’avez pas besoin d’arguments de ligne de commande, omettez le string[] args paramètre. Si vous n’avez pas besoin de retourner un code de sortie, utilisez void ou Task. Si vous devez appeler des méthodes asynchrones, utilisez async avec un type de retour Task ou Task<int>.
Valeurs de retour Main()
Lorsque vous retournez int ou Task<int>, votre programme peut envoyer des informations d’état à d’autres programmes ou scripts qui exécutent l’exécutable. Une valeur de retour d’ordinaire 0 signifie la réussite, et une valeur différente de zéro signifie qu’il y a une erreur.
L’exemple suivant retourne un code de sortie :
class MainReturnValTest
{
static int Main()
{
//...
return 0;
}
}
Après avoir exécuté le programme, vous pouvez vérifier le code de sortie. Dans PowerShell, utilisez $LastExitCode. Dans un fichier de commandes ou un script shell, utilisez %ERRORLEVEL%.
Si votre méthode Main utilise await, déclarez-la async avec un type de retour Task ou Task<int>. Le runtime appelle Main et attend la fin du retour Task avant la sortie du processus. Le type de retour ne peut pas être void ou int parce que le async modificateur nécessite un type de retour que le runtime peut attendre etvoidint ne représente pas de travail continu, de sorte que le processus peut quitter avant la fin des opérations asynchrones. Utilisez Task quand vous n’avez pas besoin d’un code de sortie ou Task<int> lorsque vous procédez comme suit :
class Program
{
static async Task<int> Main(string[] args)
{
return await AsyncConsoleWork();
}
private static async Task<int> AsyncConsoleWork()
{
return 0;
}
}
Arguments de ligne de commande
Incluez un string[] args paramètre dans votre Main déclaration pour accepter les arguments de ligne de commande. Si vous n’en avez pas besoin, omettez le paramètre. Le args paramètre est un String tableau qui n’est jamais null. Si aucun argument n’est fourni, il Length est égal à zéro.
Vous pouvez convertir des arguments de chaîne en d’autres types à l’aide Parse ou Convert:
long num = long.Parse(args[0]);
Conseil
L’analyse des arguments de ligne de commande peut être complexe. Envisagez d’utiliser la bibliothèque System.CommandLine pour simplifier le processus.
Pour obtenir un exemple de travail, consultez Comment afficher les arguments de ligne de commande.
spécification du langage C#
Pour plus d'informations, voir la spécification du langage C#. La spécification du langage est la source de référence pour la syntaxe C# et son utilisation.