ファイル修飾子
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.cs の HiddenWidget
のすべての使用は、File1.csで宣言されたファイル ローカル型に解決されます。 HiddenWidget
のファイルローカル宣言は、File2.csのパブリック宣言を非表示にします。
C# 言語仕様
詳細については、「
関連項目
.NET