file (справочник по C#)
Начиная с C# 11 file
контекстная ключевое слово является модификатором типа.
Модификатор file
ограничивает область типа верхнего уровня и видимость файла, в котором он объявлен. Модификатор file
обычно применяется к типам, написанным генератором источника. Локальные типы файлов предоставляют генераторы источников удобным способом избежать конфликтов имен между созданными типами. Модификатор file
объявляет локальный тип файла, как в следующем примере:
file class HiddenWidget
{
// implementation
}
Все типы, вложенные в локальный тип файла, также отображаются только в файле, в котором он объявлен. Другие типы в сборке могут использовать то же имя, что и локальный тип файла. Так как локальный тип файла отображается только в файле, в котором он объявлен, эти типы не создают столкновение именования.
Локальный тип файла не может быть возвращаемым типом или типом параметров любого члена, который более видимым, чем file
область. Локальный тип файла не может быть членом поля типа, который имеет большую видимость, чем file
область. Однако более видимый тип может неявно реализовать тип локального интерфейса файла. Тип также может явно реализовать локальный интерфейс файла, но явные реализации можно использовать только в file
область.
Пример
В следующем примере показан общедоступный тип, использующий локальный тип файла для предоставления рабочего метода. Кроме того, открытый тип реализует неявно локальный интерфейс файла:
// 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 File2.cs:
// Doesn't conflict with HiddenWidget
// declared in File1.cs
public class HiddenWidget
{
public void RunTask()
{
// omitted
}
}
Спецификация языка C#
Дополнительные сведения см. в разделе "Объявленные специальные возможности" в спецификации языка C# и спецификации функций локальных типов файлов C# 11.