3

另一个翻译问题,这可能更具理论性,但我对设计选择感到好奇。SFNQ:

为什么 C# 不允许像 Java 那样控制对接口中方法的访问控制?例如,在 C# 接口中:

   public void Visit(Axiom axiom);

谢谢你。

4

3 回答 3

6

在 C# 和一般的 .Net 中,接口上的所有方法默认情况下都是公共的。没有办法限制他们的访问。

考虑另一种选择,在接口上有一个受保护的成员意味着什么?您将如何建立访问规则以允许或禁止接口调用者访问特定方法?(我的意思是 C# 意义上的受保护,而不是 Java)。

更好的是,私人意味着什么?

于 2009-06-24T14:35:03.047 回答
5

在 C# 和 Java 中,接口上的所有方法都是公共的。

在 Java 中,允许使用 public 关键字,可能会节省解析规则。在 C# 中,public 关键字被认为是多余的,并从接口声明中完全删除。

于 2009-06-24T14:32:47.107 回答
4

在 C# 中,接口的所有成员都必须是公共的,因此它不允许您在成员声明中添加任何可见性修饰符。因此 public 关键字是多余的并且不需要(事实上,如果你包含它,你会得到一个编译器错误)。

接口是一个契约,它声明您将提供接口定义中指定的所有功能。如果您被允许在接口中拥有私有成员,您将不会公开该功能(因此您将违反合同)。

于 2009-06-24T14:36:24.917 回答