Поделиться через


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.

См. также