次の方法で共有


ファイル修飾子

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 - File local types 機能仕様」を参照してください。

関連項目