[英]Why does C# prohibit internal access on interface members?
C#故意阻止我将内部访问修饰符放在接口成员上。 我很确定他们在允许的情况下也必须付出更多的努力来实施此限制。
应该有充分的理由来花费这一努力-哪一个?
对我来说,在接口上具有内部访问修饰符以实现“防止外部变异”将是有用的。 例如考虑以下接口:
interface IMessage
{
...
DateTime LastSentTimestamp { get; internal set; }
...
}
在内部,在我的消息代理中,我希望能够设置LastSentTimestamp
。 我的API的外部用户不能更改它。 当然,我可以抛弃接口并改用类,但是,这消除了接口的所有优点(例如,随时更改实现等)。
Q1:我不明白为什么他们限制了我。 有什么原因吗?
Q2:我正在寻找一种针对上述情况的解决方法。 将接口拆分为两个( IMessage
和IInternalMessage
)看起来很IInternalMessage
,希望这不是我剩下的唯一选择...
我猜想C#设计人员已经看到的冲突是,您不能与声明程序集(和友元程序集)外部的internal
成员实现接口。 当然,如果外部程序集仅使用该接口,则这样做仍然有用。 另一方面,您可以通过第二个internal
-only接口获得此行为:
public interface IPublic { /* all public members */ }
internal interface IPrivate : IPublic { /* additional members */ }
您自己的类实现IPrivate
。 外部代码只能使用IPublic
。
具有一致的可访问性的,不是整个接口的成员而是应该具有访问修饰符的接口成员,以及您的类。 接口仅在由类实现时使用。 接口表示必须由实施者实现的合同。 如果某个类的内部成员不在接口的程序集中,则该类将如何实现它? 因此,它无法实现合同,但是其中的类必须能够...在逻辑上是不一致的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.