C# は意図的に、内部アクセス修飾子をインターフェイス メンバーに配置できないようにしています。私は彼らがこの制限を実装するために追加の努力を払わなければならなかったと確信しています.
その労力を費やす正当な理由があるはずです-どれですか?
私にとっては、「外部からの可変性防止」を実現するために、インターフェイスに内部アクセス修飾子があると便利です。たとえば、次のインターフェースを検討してください。
interface IMessage
{
...
DateTime LastSentTimestamp { get; internal set; }
...
}
内部的には、私のメッセージ ブローカー内で、LastSentTimestamp
. 私の API の外部ユーザーは、APIを変更できないはずです。もちろん、インターフェイスを捨てて代わりにクラスを使用することもできますが、これではインターフェイスの長所がすべて取り除かれます (たとえば、いつでも実装を変更するなど)。
Q1:なぜ彼らが私を制限するのか理解できません。特に理由はありますか?
Q2:上記の特定の状況の回避策を探しています。インターフェイスを 2 つに分割する (IMessage
とIInternalMessage
) のは、お尻の大きな痛みのように見えます。