C# 11 - file アクセス修飾子とファイルスコープの型
C# 11 の file 修飾子が、型のスコープを宣言されたファイルに限定し、ソースジェネレーターとの名前衝突を回避するのに役立つ仕組みを学びます。
file 修飾子は、型のスコープと可視性を宣言されたファイル内に限定します。これは、ソースジェネレーターによって生成される型のように、型同士の名前衝突を避けたい状況でとくに役立ちます。
簡単な例です。
file class MyLocalType { }
制約に関しては次のとおりです。
- ファイルスコープの型の中にネストされた型は、宣言されたファイル内でのみ可視となります
- アセンブリ内の他の型は、ファイルスコープの型と同じ完全修飾名を使用しても、名前の衝突を起こしません
- ファイルローカルな型は、
fileスコープより広い可視性を持つメンバーの戻り値型やパラメーターとしては使用できません - 同様に、ファイルスコープの型は、
fileスコープより広い可視性を持つ型のフィールドメンバーにはできません
一方で、次のことは可能です。
- 可視性のより広い型が、ファイルスコープのインターフェースを暗黙的に実装できる
- 可視性のより広い型がファイルスコープのインターフェースを明示的に実装することもでき、ただし明示的な実装はファイルスコープ内でのみ使用できます
ファイルスコープのインターフェースを暗黙的に実装する
public クラスは、同じファイル内で定義されている限り、ファイルスコープのインターフェースを実装できます。次の例には、ファイルスコープのインターフェース ICalculator があり、public クラス Calculator によって実装されています。
file interface ICalculator
{
int Sum(int x, int y);
}
public class Calculator : ICalculator
{
public int Sum(int x, int y) => x + y;
}
Comments
Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.