Novità di C# 10.0

Importante

Questo articolo illustra le funzionalità disponibili in C# 10.0 a livello di .NET 6 Preview 7. È in corso la documentazione dei miglioramenti per C# 10.0. È possibile controllare questo progetto per informazioni sullo stato di avanzamento della documentazione.

C# 10.0 aggiunge le funzionalità e i miglioramenti seguenti al linguaggio C# (a livello di .NET 6 Preview 7):

Alcune delle funzionalità che è possibile provare sono disponibili solo quando si imposta la versione del linguaggio su "anteprima". Queste funzionalità potrebbero avere maggiori miglioramenti nelle anteprime future prima del rilascio di .NET 6.0.

C# 10.0 è supportato in .NET 6. Per altre informazioni, vedere Controllo delle versioni del linguaggio C#.

È possibile scaricare la versione più recente di .NET 6.0 SDK dalla pagina di download di .NET. È anche possibile scaricare Visual Studio 2022 preview,che include .NET 6.0 Preview SDK.

Miglioramenti dei tipi di struttura

C# 10.0 introduce i miglioramenti seguenti relativi ai tipi di struttura:

  • È possibile dichiarare un costruttore senza parametri di istanza in un tipo di struttura e inizializzare un campo o una proprietà di istanza nella relativa dichiarazione. Per altre informazioni, vedere la sezione Costruttori senza parametri e inizializzatori di campo dell'articolo Tipi di struttura.
  • Un operando sinistro dell'espressione with può essere di qualsiasi tipo di struttura.

Direttive using globali

È possibile aggiungere il modificatore a qualsiasi direttiva using per indicare al compilatore che la direttiva si applica a tutti i file global di origine nella compilazione. Si tratta in genere di tutti i file di origine in un progetto.

Dichiarazione dello spazio dei nomi con ambito file

È possibile usare un nuovo formato della dichiarazione namespace per dichiarare che tutte le dichiarazioni successive sono membri dello spazio dei nomi dichiarato:

namespace MyNamespace;

Questa nuova sintassi consente di risparmiare spazio orizzontale e verticale per le dichiarazioni namespace più comuni.

Modelli di proprietà estese

A partire da C# 10.0, è possibile fare riferimento a proprietà o campi annidati all'interno di un modello di proprietà. Ad esempio, un modello nel formato

{ Prop1.Prop2: pattern }

è valido in C# 10.0 e versioni successive ed è equivalente a

{ Prop1: { Prop2: pattern } }

valido in C# 8.0 e versioni successive.

Per altre informazioni, vedere la nota proposta di funzionalità modelli di proprietà estesi. Per altre informazioni su un modello di proprietà, vedere la sezione Property pattern (Pattern di proprietà) dell'articolo Patterns (Modelli).

Stringhe interpolate costanti

In C# 10.0 le stringhe possono essere inizializzate usando const l'interpolazione di stringhe se tutti i segnaposto sono stringhe costanti. L'interpolazione di stringhe può creare stringhe costanti più leggibili durante la compilazione di stringhe costanti usate nell'applicazione. Le espressioni segnaposto non possono essere costanti numeriche perché tali costanti vengono convertite in stringhe in fase di esecuzione. Le impostazioni cultura correnti possono influire sulla relativa rappresentazione di stringa. Per altre informazioni, vedere le informazioni di riferimento sul const linguaggio sulle espressioni.

Nota

Quando si usa .NET 6.0 Preview 5, questa funzionalità richiede l'impostazione dell'elemento <LangVersion> nel file csproj su preview .

I tipi di record possono bloccare ToString

In C# 10.0 è possibile aggiungere il modificatore quando si esegue sealed l'override in un tipo di ToString record. Il sealing ToString del metodo impedisce al compilatore di sintetizzare un metodo per qualsiasi tipo di record ToString derivato. Ciò garantisce che tutti i tipi di record derivati ToString usino il metodo definito in un tipo di record di base comune. Per altre informazioni su questa funzionalità, vedere l'articolo sui record.

Nota

Quando si usa .NET 6.0 Preview 5, questa funzionalità richiede l'impostazione dell'elemento <LangVersion> nel file csproj su preview .

Assegnazione e dichiarazione nella stessa decostruzione

Questa modifica rimuove una restrizione dalle versioni precedenti di C#. In precedenza, una decostruzione poteva assegnare tutti i valori alle variabili esistenti o inizializzare le variabili appena dichiarate:

// Initialization:
(int x, int y) = point;

// assignment:
int x1 = 0;
int y1 = 0;
(x1, y1) = point;

C# 10.0 rimuove questa restrizione:

int x = 0;
(x, int y) = point;

Nota

Quando si usa .NET 6.0 Preview 5, questa funzionalità richiede l'impostazione dell'elemento <LangVersion> nel file csproj su preview .

Attributo Allow AsyncMethodBuilder nei metodi

In C# 10.0 e versioni successive è possibile specificare un diverso generatore di metodi asincroni per un singolo metodo, oltre a specificare il tipo di generatore di metodi per tutti i metodi che restituiscono un tipo simile a un'attività specificato. Ciò consente scenari avanzati di ottimizzazione delle prestazioni in cui un determinato metodo può trarre vantaggio da un generatore personalizzato.

Per altre informazioni, vedere la sezione AsyncMethodBuilder su nell'articolo sugli attributi letti dal compilatore.