私は現在取り組んでいるプロジェクトのコードベースをリファクタリングしており、アセンブリの範囲を超えて役に立たないクラス/インターフェイスを(パブリックではなく)内部として宣言する必要があります。しかし、次のコードで問題が発生しました。
internal interface IFirstInterface
{
...
}
internal interface ISecondInterface
{
IFirstInterface First{ get; }
...
}
public class Implementer : ISecondInterface
{
public IFirstInterface First {get; private set;}
...
}
私の質問:
内部インターフェイスのメンバーを公に実装する必要があるのはなぜですか?内部クラスにインターフェースを実装する場合、実装されたメンバーは内部にあるべきではありませんか?クラスが内部であるため、インターフェイスメンバーはとにかくパブリックにアクセスできないため、これは大きな問題ではありません。直感に反しているようです。
主な問題は上記のシナリオにあります。これは、IFirstInterfaceが内部インターフェイスであるとされているため、パブリックゲッターを使用できないためです。つまり、コンパイラから次のエラーが発生します。
一貫性のないアクセシビリティ:プロパティタイプ「IFirstInterface」は、プロパティ「Implementer.First」よりもアクセスしにくいです。
これを回避する方法はありますか?
注:このリファクタリングの演習にはおそらくほとんど価値がないことを認識していますが、内部修飾子の意味をより深く理解するための良い方法だと思いました。