Le modèle d’application console C# génère des instructions de niveau supérieur

À compter de .NET 6, le modèle de projet pour les nouvelles applications console C# génère le code suivant dans le fichier Program.cs :

// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");

La nouvelle sortie utilise des fonctionnalités C# récentes qui simplifient le code que vous devez écrire pour un programme. Pour .NET 5 et les versions antérieures, le modèle d’application console génère le code suivant :

using System;

namespace MyApp // Note: actual namespace depends on the project name.
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

Ces deux formes représentent le même programme. Les deux sont valides avec C# 10.0. Lorsque vous utilisez la version la plus récente, vous devez uniquement écrire le corps de la Main méthode. Le compilateur génère une classe Program avec une méthode de point d’entrée et place toutes vos instructions de niveau supérieur dans cette méthode. Le nom de la méthode générée n’est pas Main, il s’agit d’un détail d’implémentation que votre code ne peut pas référencer directement. Vous n’avez pas besoin d’inclure les autres éléments de programme, le compilateur les génère pour vous. Vous pouvez en savoir plus sur le code généré par le compilateur lorsque vous utilisez des instructions de niveau supérieur dans l’article sur les instructions de niveau supérieur dans la section Principes de base du Guide C#.

Vous avez deux options pour travailler avec des didacticiels qui n’ont pas été mis à jour pour utiliser des modèles .NET 6+ :

  • Utilisez le nouveau style de programme, en ajoutant de nouvelles instructions de niveau supérieur à mesure que vous ajoutez des fonctionnalités.
  • Convertissez le nouveau style de programme en style plus ancien, avec une classe Program et une méthode Main.

Si vous souhaitez utiliser les anciens modèles, consultez Utiliser l’ancien style de programme plus loin dans cet article.

Utiliser le nouveau style de programme

Les fonctionnalités qui simplifient le nouveau programme sont des instructions de niveau supérieur, directives using globales , et des directivesusing implicites.

Le terme instructions de niveau supérieur signifie que le compilateur génère les éléments de classe et de méthode pour votre programme principal. La classe et la méthode de point d’entrée générées par le compilateur sont déclarées dans l’espace de noms global. Vous pouvez examiner le code de la nouvelle application et imaginer qu’il contient les instructions à l’intérieur de la méthode Main générée par les modèles précédents, mais dans l’espace de noms global.

Vous pouvez ajouter d’autres instructions au programme, tout comme vous pouvez ajouter d’autres instructions à votre méthode Main dans le style traditionnel. Vous pouvez accéder au args (arguments de ligne de commande),utiliser awaitet définir le code de sortie. Vous pouvez même ajouter des fonctions. Elles sont créées en tant que fonctions locales imbriquées dans la méthode de point d’entrée générée. Les fonctions locales ne peuvent pas inclure de modificateurs d’accès (par exemple, public ou protected).

Les instructions de niveau supérieur et les directivesusing implicites simplifient le code qui compose votre application. Pour suivre un didacticiel existant, ajoutez de nouvelles instructions au fichier Program.cs généré par le modèle. Vous pouvez imaginer que les instructions que vous écrivez se trouvent entre les accolades ouvertes et fermantes dans la méthode Main dans les instructions du didacticiel.

Si vous préférez utiliser l’ancien format, vous pouvez copier le code du deuxième exemple de cet article et continuer le didacticiel comme précédemment.

Vous pouvez en savoir plus sur les instructions de niveau supérieur dans le didacticiel d’exploration sur les instructions de niveau supérieur.

Directives using implicites

Le terme directivesusing implicites signifie que le compilateur ajoute automatiquement un ensemble de using directives en fonction du type de projet. Pour les applications console, les directives suivantes sont implicitement incluses dans l’application :

  • using System;
  • using System.IO;
  • using System.Collections.Generic;
  • using System.Linq;
  • using System.Net.Http;
  • using System.Threading;
  • using System.Threading.Tasks;

D’autres types d’application incluent davantage d’espaces de noms qui sont courants pour ces types d’application.

Si vous avez besoin de directives using qui ne sont pas implicitement incluses, vous pouvez les ajouter au fichier .cs qui contient des instructions de niveau supérieur ou à d’autres fichiers .cs. Pour les directives using dont vous avez besoin dans tous les fichiers .cs d’une application, utilisez des directivesusing globales.

Désactiver les directives using implicites

Si vous souhaitez supprimer ce comportement et contrôler manuellement tous les espaces de noms de votre projet, ajoutez <ImplicitUsings>disable</ImplicitUsings> à votre fichier projet dans l’élément <PropertyGroup>, comme illustré dans l’exemple suivant :

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    ...
    <ImplicitUsings>disable</ImplicitUsings>
  </PropertyGroup>

</Project>

Directives globales using

Une directive using globale importe un espace de noms pour l’ensemble de votre application au lieu d’un seul fichier. Ces directives globales peuvent être ajoutées soit en ajoutant un élément <Using> au fichier projet, soit en ajoutant la directive global using à un fichier de code.

Vous pouvez également ajouter un élément <Using> avec un attribut Remove à votre fichier projet pour supprimer une directive using implicite spécifique. Par exemple, si la fonctionnalité de directives implicites using est activée avec <ImplicitUsings>enable</ImplicitUsings>, l’ajout de l’élément suivant <Using> supprime l’espace de noms System.Net.Http de ceux qui sont implicitement importés :

<ItemGroup>
  <Using Remove="System.Net.Http" />
</ItemGroup>

Utiliser l’ancien style de programme

À compter de .NET SDK 6.0.300, le modèle console a une option --use-program-main. Utilisez-le pour créer un projet de console qui n’utilise pas d’instructions de niveau supérieur et qui a une méthode Main.

dotnet new console --use-program-main

Le Program.cs généré est le suivant :

namespace MyProject;
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Hello, World!");
    }
}

Utiliser l’ancien style de programme dans Visual Studio

  1. Lorsque vous créez un projet, les étapes d’installation accèdent à la page d’installation Informations supplémentaires . Dans cette page, cochez la case Ne pas utiliser d’instructions de niveau supérieur.

    Visual Studio do not use top-level statements check box

  2. Une fois votre projet créé, le contenu Program.cs est le suivant :

    namespace MyProject;
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello, World!");
        }
    }
    

Notes

Visual Studio conserve la valeur des options la prochaine fois que vous créez le projet en fonction du même modèle. Par défaut, lors de la création d’un projet d’application console, la prochaine fois, la case à cocher « Ne pas utiliser d’instructions de niveau supérieur » est cochée. Le contenu du fichier Program.cs peut être différent pour correspondre au style de code défini dans les paramètres globaux de l’éditeur de texte Visual Studio ou dans le fichier EditorConfig.

Pour plus d’informations, consultez Créer des paramètres d’éditeur personnalisés et portables avec EditorConfig et Options, Éditeur de texte, C#, Avancé.