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 metodoMain
.
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 await
e 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
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.
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.