Modificatore di file
A partire da C# 11, la parola chiave contestuale file
è un modificatore di tipi.
Il modificatore file
limita la visibilità di un tipo di livello superiore al file in cui è dichiarato. Il modificatore file
viene spesso applicato ai tipi scritti da un generatore di origine. I tipi locali di file forniscono ai generatori di origine un modo pratico per evitare conflitti di nomi tra i tipi generati. Il modificatore file
dichiara un tipo locale di file, come in questo esempio:
file class HiddenWidget
{
// implementation
}
Tutti i tipi annidati all'interno di un tipo locale di file sono visibili solo all'interno del file in cui è dichiarato. Altri tipi in un assembly possono usare lo stesso nome di un tipo locale di file. Poiché 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 dichiarato in un tipo non locale di file. Un tipo file-locale non può essere un membro di campo di un non-file-locale. Tuttavia, un tipo più visibile può implementare in modo implicito un tipo di interfaccia locale di file. Il tipo può anche implementare in modo esplicito un'interfaccia locale di file, ma le implementazioni esplicite possono essere usate solo all'interno dello stesso file.
Nell'esempio seguente viene illustrato un tipo pubblico che usa un tipo locale di file per fornire un metodo 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
}
}
La ricerca dei membri preferisce un tipo file-local dichiarato nello stesso file rispetto a un tipo non locale di file dichiarato in un file diverso. Questa regola garantisce che un generatore di codice sorgente possa basarsi sulla risoluzione dell'analisi dei membri in un tipo definito a livello di file senza ambiguità con altre dichiarazioni di tipo. Nell'esempio precedente, tutti gli usi di HiddenWidget
in File1.cs risolvono al tipo locale al file dichiarato in File1.cs. La dichiarazione file-local di HiddenWidget
nasconde la dichiarazione pubblica in File2.cs.
Specifica del linguaggio C#
Per altre informazioni, vedere
Vedere anche
- parole chiave C#
- Modificatori di accesso
- livelli di accessibilità
- modificatori
- pubblico
- protetto
- interno