Il modello di app console C# genera istruzioni di primo livello

A partire da .NET 6, il modello di progetto per le nuove app console C# genera il codice seguente nel file Program.cs:

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

Il nuovo output usa le funzionalità C# recenti che semplificano il codice necessario per scrivere un programma. Per .NET 5 e versioni precedenti, il modello di app console genera il seguente codice:

using System;

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

Questi due moduli rappresentano lo stesso programma. Entrambi sono validi con C# 10.0. Quando si usa la versione più recente, è sufficiente scrivere il corpo del metodo Main. Il compilatore genera una classe Program con un metodo del punto di ingresso e inserisce tutte le istruzioni di primo livello in tale metodo. Il nome del metodo generato non è Main, è un dettaglio di implementazione a cui il codice non può fare riferimento direttamente. Non è necessario includere gli altri elementi del programma, il compilatore li genera automaticamente. È possibile ottenere altre informazioni sul codice generato dal compilatore quando si usano istruzioni di primo livello nell'articolo sulle istruzioni di primo livello nella sezione Nozioni fondamentali della Guida per C#.

Sono disponibili due opzioni per l'uso di esercitazioni che non sono state aggiornate per l'uso di modelli .NET 6+:

  • Usare il nuovo stile di programma, aggiungendo nuove istruzioni di primo livello man mano che si aggiungono funzionalità.
  • Convertire il nuovo stile del programma nello stile precedente, con una classe Program e un metodo Main.

Per usare i modelli precedenti, vedere Usare lo stile del programma precedente più avanti in questo articolo.

Usare il nuovo stile del programma

Le funzionalità che semplificano il nuovo programma sono istruzioni di primo livello, direttive using globali e direttive using implicite.

Il termine istruzioni di primo livello indica che il compilatore genera gli elementi della classe e del metodo per il programma principale. La classe e il metodo del punto di ingresso generati dal compilatore vengono dichiarati nello spazio dei nomi globale. È possibile esaminare il codice della nuova applicazione e immaginare che contenga le istruzioni all'interno del metodo Main generato dai modelli precedenti, ma nello spazio dei nomi globale.

È possibile aggiungere altre istruzioni al programma, proprio come è possibile aggiungere altre istruzioni al metodo Main nello stile tradizionale. È possibile accedere a args (argomenti della riga di comando), usare awaite impostare il codice di uscita. È possibile anche aggiungere funzioni. Vengono create come funzioni locali annidate all'interno del metodo del punto di ingresso generato. Le funzioni locali non possono includere modificatori di accesso, ad esempio public o protected.

Sia le istruzioni di primo livello che le direttive using implicite semplificano il codice che costituisce l'applicazione. Per seguire un'esercitazione esistente, aggiungere eventuali nuove istruzioni al file Program.cs generato dal modello. È possibile immaginare che le istruzioni scritte siano incluse tra parentesi graffe aperte e chiuse del metodo Main nelle istruzioni dell'esercitazione.

Se si preferisce usare il formato precedente, è possibile copiare il codice dal secondo esempio di questo articolo e continuare l'esercitazione come prima.

Per altre informazioni sulle istruzioni di primo livello, vedere l'esplorazione dell'esercitazione sulle istruzioni di primo livello.

Direttive using implicite

Il termine direttive using implicite indica che il compilatore aggiunge automaticamente un set di using direttive in base al tipo di progetto. Per le applicazioni console, le direttive seguenti sono implicitamente incluse nell'applicazione:

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

Altri tipi di applicazioni includono più spazi dei nomi comuni a quei tipi di applicazioni.

Se sono necessarie direttive using che non sono incluse in modo implicito, è possibile aggiungerle al file .cs che contiene istruzioni di primo livello o ad altri file .cs. Per le direttive using necessarie in tutti i file .cs in un'applicazione, usare le direttive using globali.

Disabilitare le direttive using implicite

Per rimuovere questo comportamento e controllare manualmente tutti gli spazi dei nomi nel progetto, aggiungere <ImplicitUsings>disable</ImplicitUsings> al file di progetto nell'elemento <PropertyGroup>, come illustrato nell'esempio seguente:

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

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

</Project>

Direttive using globali

Una direttiva using globale importa uno spazio dei nomi per l'intera applicazione anziché un singolo file. Queste direttive globali possono essere aggiunte sia aggiungendo una elemento <Using> al file di progetto, sia aggiungendo la direttiva global using a un file di codice.

È anche possibile aggiungere un elemento <Using> con un attributo Remove al file di progetto per rimuovere una direttiva implicita using specifica. Ad esempio, se la funzionalità delle direttive using implicite è attivata con <ImplicitUsings>enable</ImplicitUsings>, l'aggiunta dell'elemento <Using> seguente rimuove lo spazio dei nomi System.Net.Http da quelli importati in modo implicito:

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

Usare lo stile del programma precedente

A partire da .NET SDK 6.0.300, il modello di console ha un'opzione --use-program-main. Usarlo per creare un progetto console che non usa istruzioni di primo livello e ha un metodo Main.

dotnet new console --use-program-main

Il seguente Program.cs è stato generato:

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

Usare lo stile del programma precedente in Visual Studio

  1. Quando si crea un nuovo progetto, i passaggi di installazione portano alla pagina di configurazione delle Informazioni aggiuntive. In questa pagina selezionare la casella di controllo Non usare istruzioni di primo livello.

    Visual Studio do not use top-level statements check box

  2. Dopo aver creato il progetto, il contenuto Program.cs è il seguente:

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

Nota

Visual Studio mantiene il valore delle opzioni per le successive creazioni di progetti basati sullo stesso modello, quindi, per impostazione predefinita, alla prossima creazione di un progetto di app console, la casella di controllo "Non usare istruzioni di primo livello" sarà selezionata. Il contenuto del file Program.cs potrebbe essere diverso da quello definito nelle impostazioni globali dell'editor di testo di Visual Studio o nel file EditorConfig.

Per altre informazioni, vedere Creare impostazioni personalizzate e portabili per l'editor con EditorConfig e Opzioni, Editor di testo, C#, Avanzate.