2

C# は意図的に、内部アクセス修飾子をインターフェイス メンバーに配置できないようにしています。私は彼らがこの制限を実装するために追加の努力を払わなければならなかったと確信しています.

その労力を費やす正当な理由があるはずです-どれですか?

私にとっては、「外部からの可変性防止」を実現するために、インターフェイスに内部アクセス修飾子があると便利です。たとえば、次のインターフェースを検討してください。

interface IMessage
{
    ...
    DateTime LastSentTimestamp { get; internal set; }
    ...
}

内部的には、私のメッセージ ブローカー内で、LastSentTimestamp. 私の API の外部ユーザーは、APIを変更できないはずです。もちろん、インターフェイスを捨てて代わりにクラスを使用することもできますが、これではインターフェイスの長所がすべて取り除かれます (たとえば、いつでも実装を変更するなど)。

Q1:なぜ彼らが私を制限するのか理解できません。特に理由はありますか?

Q2:上記の特定の状況の回避策を探しています。インターフェイスを 2 つに分割する (IMessageIInternalMessage) のは、お尻の大きな痛みのように見えます。

4

2 に答える 2

1

アクセス修飾子を持つ必要があるのはインターフェイスのメンバーではなく、一貫したアクセシビリティとクラスを持つためにインターフェイス全体です。インターフェイスは、クラスによって実装された場合にのみ使用されます。インターフェイスは、実装者が実現しなければならない契約を表します。インターフェイスのアセンブリの外部にある場合、クラスは内部メンバーをどのように実装しますか? これにより、契約を実装することはできませんが、内部のクラスはできる必要があります...これは論理的に矛盾しています。

于 2013-10-06T18:54:54.797 に答える