file (riferimento C#)
A partire da C# 11, la parola chiave contestuale file
è un modificatore di tipo.
Il modificatore file
limita l'ambito e la visibilità del tipo di primo livello al file in cui è dichiarato. Il modificatore file
in genere verrà applicato ai tipi scritti da un generatore di origine. I tipi file-local forniscono ai generatori di origine un modo pratico per evitare conflitti di nomi tra i tipi generati. Il modificatore file
dichiara un tipo file-local, come in questo esempio:
file class HiddenWidget
{
// implementation
}
Tutti i tipi annidati all'interno di un tipo file-local sono visibili solo all'interno del file in cui sono dichiarati. Altri tipi in un assembly possono usare lo stesso nome di un tipo file-local. Dato che il tipo file-local è visibile solo nel file in cui è dichiarato, questi tipi non creano un conflitto di denominazione.
Un tipo file-local non può essere il tipo restituito o il tipo di parametro di qualsiasi membro più visibile rispetto all'ambito file
. Un tipo file-local non può essere un membro del campo di un tipo con visibilità maggiore rispetto all'ambito file
. Tuttavia, un tipo più visibile può implementare in modo implicito un tipo di interfaccia file-local. Il tipo può anche implementare in modo esplicito un'interfaccia file-local, ma le implementazioni esplicite possono essere usate solo all'interno dell'ambito file
.
Esempio
Nell'esempio seguente viene illustrato un tipo pubblico che usa un tipo file-local per fornire un metodo di ruolo di lavoro. Inoltre, il tipo pubblico implementa in modo implicito un'interfaccia file-local:
// In File1.cs:
file interface IWidget
{
int ProvideAnswer();
}
file class HiddenWidget
{
public int Work() => 42;
}
public class Widget : IWidget
{
public int ProvideAnswer()
{
var worker = new HiddenWidget();
return worker.Work();
}
}
In un altro file di origine è possibile dichiarare tipi con gli stessi nomi dei tipi file-local. I tipi file-local non sono visibili:
// In File2.cs:
// Doesn't conflict with HiddenWidget
// declared in File1.cs
public class HiddenWidget
{
public void RunTask()
{
// omitted
}
}
Specifiche del linguaggio C#
Per altre informazioni, vedere Accessibilità dichiarata in C# Language Specification e la specifica della funzionalità C# 11 - Tipi file-local.