C# 故意阻止我将内部访问修饰符放在接口(interface)成员上。我很确定他们本来可以允许这样做,但他们必须付出额外的努力来实现这一限制。
应该有一个充分的理由去花费这样的努力 - 哪一个?
对我来说,在接口(interface)上使用内部访问修饰符来实现“来自外部的可变性预防”会很有用。例如。考虑以下接口(interface):
interface IMessage
{
...
DateTime LastSentTimestamp { get; internal set; }
...
}
在内部,在我的消息代理中,我希望能够设置LastSentTimestamp
。我的 API 的外部用户不应该能够更改它。当然,我可以放弃接口(interface)并使用类,但是,这消除了接口(interface)的所有优点(例如随时更改实现等)
问题1:我不明白他们为什么限制我。有什么特殊原因吗?
问题2:我正在寻找针对上述特定情况的解决方法。将界面一分为二(IMessage
和 IInternalMessage
)看起来很麻烦,希望这不是我唯一的选择......
最佳答案
我猜 C# 设计者所看到的冲突是,您无法使用声明程序集(和友元程序集)之外的内部
成员实现接口(interface)。当然,如果外部程序集仅使用该接口(interface),那么这样做仍然有用。另一方面,您可以使用第二个仅限内部的接口(interface)来获得此行为:
public interface IPublic { /* all public members */ }
internal interface IPrivate : IPublic { /* additional members */ }
您自己的类实现IPrivate
。外部代码只能使用IPublic
。
关于c# - 为什么C#禁止接口(interface)成员的内部访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19212621/