protected
C# では、インターフェースを実装すると、すべてのメンバーが暗黙的にパブリックになります。アクセシビリティ修飾子 ( 、internal
、もちろん除く)を指定できればもっと良いのではないでしょうかprivate
。それとも、代わりに抽象クラスを使用するべきでしょうか。
ベストアンサー1
インターフェイスが内部の場合、そのすべてのメンバーはアセンブリの内部になります。ネストされたインターフェイスが保護されている場合、そのインターフェイスにアクセスできるのは外部クラスのサブクラスのみです。
宣言アセンブリの外部にあるインターフェースの内部メンバーは無意味であり、宣言外部クラスの外部にあるインターフェースの保護されたメンバーも無意味です。
インターフェースの目的は、契約実装型とインターフェースのユーザーの間の関係。外部の呼び出し側は気にしないし、気にするべきではない。持っている実装を気にする必要があり、そのためには内部メンバーと保護されたメンバーが必要です。
基底クラスから呼び出される保護されたメンバーの場合、基底クラスとそれを継承するクラス間の契約を指定するには抽象クラスが最適です。ただし、この場合、実装の詳細は通常非常に重要になります。ただし、退化した純粋抽象クラス (全てメンバーが抽象的である場合、保護されたメンバーは役に立ちません。その場合は、インターフェイスを使用して、選択する型を実装するための単一の基本クラスを保存します。