另一个翻译问题,这可能更具理论性,但我对设计选择感到好奇。 SFNQ:
为什么C#不允许控制访问Java等接口中的方法?例如,在C#界面中:
public void Visit(Axiom axiom);
谢谢。
答案 0 :(得分:6)
在C#和.Net中,默认情况下,接口上的所有方法都是公共的。没有办法限制他们的访问权。
考虑替代方案,在接口上拥有受保护的成员意味着什么?您如何建立访问规则以允许或禁止接口的调用者访问特定方法? (我的意思是在C#意义上保护,而不是java)。
更好的是,私人意味着什么?
答案 1 :(得分:5)
在C#和Java中,接口上的所有方法都是公共的。
在Java中,允许使用public关键字,可能会节省解析规则。在C#中,public关键字被认为是冗余的,并且完全从接口声明中删除。
答案 2 :(得分:4)
在C#中,接口的所有成员都必须是公共的,因此它不允许您向成员声明添加任何可见性修饰符。因此,public关键字是多余的,不需要(事实上,如果包含它,则会出现编译器错误)。
接口是一个合同,声明您将提供接口定义中指定的所有功能。如果您被允许在界面中拥有私人成员,您将不会暴露该功能(因此您将违反合同)。