Condividi tramite


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 funzionalità C# recenti che semplificano il codice necessario per scrivere per un programma. Per .NET 5 e versioni precedenti, il modello di app console genera il codice seguente:

using System;

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

Nel codice precedente lo spazio dei nomi effettivo dipende dal nome del progetto.

Queste due forme rappresentano lo stesso programma. Entrambi sono validi in C#. Quando si usa la versione più recente, è sufficiente scrivere il corpo del metodo Main. Il compilatore genera una classe Program con un metodo 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 che 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 su istruzioni di primo livello nella sezione Nozioni fondamentali della Guida per C#.

Hai due opzioni per lavorare con esercitazioni che non sono ancora aggiornate per utilizzare i modelli .NET 6+:

  • Usare il nuovo stile del programma, aggiungendo nuove istruzioni di primo livello durante l'aggiunta di funzionalità.
  • Convertire il nuovo stile del programma nello stile precedente, con una classe Program e un metodo Main.

Per usare i modelli precedenti, consultare la sezione Usare lo stile del programma precedente più avanti nell'articolo.

Usa il nuovo stile del programma

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

Il termine istruzioni di primo livello indica che il compilatore genera la classe e gli elementi del metodo per il programma principale. La classe generata dal compilatore e il metodo del punto di ingresso vengono dichiarati nello spazio dei nomi globale. È possibile esaminare il codice della nuova applicazione e immaginare che contenga le istruzioni che si trovano 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 args (argomenti della riga di comando), usare awaite impostare il codice di uscita. È anche possibile 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 sia le direttive implicite using semplificano il codice che costituisce l'applicazione. Per seguire un tutorial esistente, aggiungere nuove istruzioni al file Program.cs generato dal modello. Puoi immaginare che le istruzioni che scrivi siano comprese tra le parentesi graffe aperte e chiuse nel 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.

Puoi saperne di più sulle istruzioni di primo livello nell'esercitazione esplorativa su istruzioni di primo livello.

Direttive using implicite

Il termine direttive using implicite significa che il compilatore aggiunge automaticamente un set di direttive using in base al tipo di progetto. Per le applicazioni console, le direttive seguenti sono incluse in modo implicito 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 applicazione includono più namespace comuni per quei tipi di applicazione.

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 di .cs. Per le direttive using necessarie in tutti i file di .cs di un'applicazione, usare le direttive globali using.

Disabilitare direttive using implicite

Se si desidera rimuovere questo comportamento e controllare manualmente tutti i namespace 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 aggiungendo un elemento <Using> al file di progetto o 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 specifica direttiva implicita using. 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>

Usa 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 Program.cs generato è il seguente:

namespace MyProject;

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

Usa lo stile del programma vecchio in Visual Studio

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

    Visual Studio non utilizzare la casella di controllo per le istruzioni di primo livello

  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 nelle prossime creazioni di progetti basati sullo stesso modello, quindi per impostazione predefinita, quando si crea nuovamente un progetto di Console App, la casella di controllo per "Non usare istruzioni di primo livello" sarà selezionata. Il contenuto del file Program.cs potrebbe essere diverso in base allo stile di codice definito nelle impostazioni globali dell'editor di testo di Visual Studio o nel file EditorConfig.

Per altre informazioni, vedere Crea impostazioni portatili e personalizzate per l'editor con EditorConfig e Opzioni, Editor di Testo, C#, Avanzate.