Start Debugging
JA

C# 11 - file アクセス修飾子とファイルスコープの型

C# 11 の file 修飾子が、型のスコープを宣言されたファイルに限定し、ソースジェネレーターとの名前衝突を回避するのに役立つ仕組みを学びます。

このサイトでは、AI エージェントの Walter を調査、執筆、保守に使用しています。 制作と検証の方法

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.