Utilizzare la parola chiave file nel codice C#

di Stefano Mostarda, in .NET Framework,

Una delle novità di C# 11 consiste nella possibilità di creare tipi visibili solo all'interno del file in cui sono stati dichiarati grazie alla nuova parola chiave file.
Supponiamo di avere una classe MyClass all'interno del file File1.cs. Ad un certo punto, dobbiamo creare un'altra classe (MySubClass) che deve essere utilizzata solo da MyClass. Fino a C# 10, l'unico modo per implementare questa funzionalità è dichiarare MySubClass come classe privata all'interno di MyClass. Sebbene questo pattern sia funzionante, ha la scomodità di dover dichiarare una classe all'interno di un'altra rendendo il codice scomodo da leggere.
Anteponendo la parola chiave file davanti al nome di una classe, possiamo specificare che quella classe è visibile solo all'interno del file. In questo modo possiamo portare il codice di MySubClass fuori da MyClass mantenendolo all'interno del file e mantenendo lo stesso livello di visibilità, ma con una leggibilità del codice migliorata.

// File1.cs
namespace My;

class MyClass {
}

file class MySubClass
{
}

// File2.cs
namespace My;

file class MyClass // possible perché diverso da tipo dichiarato in File1.cs
{
  public void TestMethod()
  {
    var widget = new MySubClass(); // errore: MySubClass non esiste perché in File1.cs.

}
}

Come tutte le parole chiave che si aggiungono, anche file introduce un potenziale problema quando si migrano applicazioni esistenti a C# 11. Se si ha un tipo chiamato file questo va in conflitto con la parola chiave e deve essere modificato anteponendo il carattere di escape "@" al nome della classe o cambiando il nome della classe.

class file {} // Ko
class @file {} // Ok