文件编辑器

从 C# 11 开始,file 上下文关键字是类型修饰符。

file 修饰符将顶级类型的可见性限制为声明其的文件。 file 修饰符最常应用于源生成器编写的类型。 文件本地类型为源生成器提供了一种方便的方法,以避免在生成的类型之间发生名称冲突。 file 修饰符声明文件本地类型,如以下示例所示:

file class HiddenWidget
{
    // implementation
}

嵌套在文件局部类型中的任何类型,也都只能在其声明所在的文件中可见。 程序集中的其他类型可以使用与文件本地类型相同的名称。 由于文件本地类型仅在声明它的文件中可见,因此这些类型不会造成命名冲突。

文件本地类型不能作为在非文件本地类型中声明的任何成员的返回类型或参数类型。 文件本地类型不能是非文件本地的字段成员。 但是,更可见的类型可以隐式实现文件本地接口类型。 该类型还可以 显式实现 文件本地接口,但显式实现只能在同一文件中使用。

以下示例演示使用文件本地类型提供辅助角色方法的公共类型。 此外,公共类型还隐式实现文件本地接口:

// 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
    }
}

成员查找首选在同一文件中声明的文件本地类型,而不是在不同文件中声明的非本地类型。 此规则可确保源生成器可以依赖于解析为文件本地类型的成员查找,而不会与其他类型声明产生歧义。 在前面的示例中,File1.csHiddenWidget 的所有用法都解析为在 File1.cs中声明的文件本地类型。 HiddenWidget 的文件本地声明隐藏 File2.cs中的公共声明。

C# 语言规范

有关详细信息,请参阅 C# 语言规范中的 声明的可访问性,以及 C# 11 - 文件本地类型 功能规范。

另请参阅