file (C# リファレンス)
C# 11 以降、file
コンテキスト キーワードは型修飾子です。
file
修飾子は、最上位レベルの型のスコープと可視性を、それが宣言されているファイルに制限します。 file
修飾子は、ソース ジェネレーターによって書き込まれた型に通常適用されます。 file ローカル型は、生成された型間の名前の競合を回避する便利な方法をソース ジェネレーターに提供しています。 file
修飾子では、次の例のように、file ローカル型を宣言します。
file class HiddenWidget
{
// implementation
}
file ローカル型内に入れ子になっている型も、その型が宣言されているファイル内でのみ可視できます。 アセンブリ内の他の型は、file ローカル型と同じ名前を使用できます。 file ローカル型は、それが宣言されているファイルでのみ可視されるため、これらの型では名前の競合は発生しません。
file ローカル型は、file
スコープより可視性が高いメンバーの戻り値の型またはパラメーター型にすることはできません。 file ローカル型は、file
スコープより可視性の高い型のフィールド メンバーにすることはできません。 ただし、より可視性の高い型で、file ローカル インターフェイス型を暗黙的に実装することができます。 型はファイルローカル インターフェイスを明示的に実装 することもできますが、明示的な実装は file
スコープ内でのみ使用できます。
例
次の例は、file ローカル型を使用して worker メソッドを提供する public 型を示しています。 さらに、この public 型では、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();
}
}
別のソース ファイルでは、file ローカル型と同じ名前の型を宣言できます。 file ローカル型は可視できません。
// In File2.cs:
// Doesn't conflict with HiddenWidget
// declared in File1.cs
public class HiddenWidget
{
public void RunTask()
{
// omitted
}
}
C# 言語仕様
詳細については、C# 言語の仕様に関するページの「アクセシビリティの宣言」および C# 11 - file ローカル型の機能仕様に関するページを参照してください。
関連項目
.NET