Membri astratti statici dichiarati nelle interfacce
.NET 6 include in anteprima una nuova funzionalità grazie alla quale i membri dell'interfaccia static
possono essere contrassegnati come abstract
. Questa funzionalità comporta diverse modifiche alla specifica ECMA 335 per consentire modelli di metadati del linguaggio intermedio (IL) considerati in precedenza non validi. Per altre informazioni, vedere dotnet/runtime#49558.
Comportamento precedente
Se un'interfaccia statica veniva contrassegnata come abstract
:
- Il compilatore C# generava l'errore CS0112.
- Gli strumenti e altri compilatori generavano metadati IL non validi.
Nuovo comportamento
A partire da .NET 6, i membri dell'interfaccia statici possono essere contrassegnati come abstract
e verranno compilati correttamente. Inoltre, i modelli di metadati IL generati sono ora considerati validi a causa delle modifiche apportate alla specifica ECMA 335.
L'implementazione dei membri di interfaccia static abstract
è fornita dai tipi che implementano l'interfaccia.
Nota
Per .NET 6, è necessario abilitare le funzionalità di anteprima nel progetto per poter contrassegnare un membro di interfaccia come static abstract
.
Poiché si tratta di un nuovo modello IL valido, gli strumenti esistenti potrebbero elaborare erroneamente i metadati associati e avere un comportamento imprevisto. È probabile che gli strumenti incontrino il nuovo modello di metadati, perché le interfacce con membri static abstract
vengono ora visualizzate per i tipi primitivi, ad esempio System.Int32.
Versione introdotta
.NET 6
Tipo di modifica che causa un'interruzione
Questa modifica può influire sulla compatibilità binaria.
Motivo della modifica
Questa modifica è stata introdotta perché non era possibile eseguire astrazioni sui membri statici e scrivere codice generalizzato applicabile a tutti i tipi che definiscono tali membri statici. Ciò era particolarmente problematico per i tipi di membri che esistono solo in forma statica, ad esempio gli operatori.
Azione consigliata
Aggiornare gli strumenti che utilizzano i file binari .NET o il codice sorgente C# per tenere conto del nuovo concetto di membri dell'interfaccia static abstract
, inclusi quelli esistenti per i tipi primitivi .NET.
API interessate
N/D