【发布时间】:2010-11-05 13:00:43
【问题描述】:
另一个翻译问题,这可能更具理论性,但我对设计选择感到好奇。 SFNQ:
为什么 C# 不允许像 Java 那样控制对接口中方法的访问控制?例如,在 C# 接口中:
public void Visit(Axiom axiom);
谢谢。
【问题讨论】:
标签: c# java translation public-method
另一个翻译问题,这可能更具理论性,但我对设计选择感到好奇。 SFNQ:
为什么 C# 不允许像 Java 那样控制对接口中方法的访问控制?例如,在 C# 接口中:
public void Visit(Axiom axiom);
谢谢。
【问题讨论】:
标签: c# java translation public-method
在 C# 中,接口的所有成员都必须是公共的,因此不允许您在成员声明中添加任何可见性修饰符。因此 public 关键字是多余的并且不需要(事实上,如果你包含它,你会得到一个编译器错误)。
接口是一种契约,它规定您将提供接口定义中指定的所有功能。如果您被允许在接口中拥有私有成员,您将不会公开该功能(因此您会违反合同)。
【讨论】:
在 C# 和一般的 .Net 中,接口上的所有方法默认情况下都是公共的。没有办法限制他们的访问。
考虑另一种选择,在接口上拥有一个受保护的成员意味着什么?您将如何建立访问规则以允许或禁止接口调用者访问特定方法? (我的意思是 C# 意义上的受保护,而不是 Java)。
更好的是,私有是什么意思?
【讨论】:
internal/Friend 在理论上可能是有道理的。不过,这并不是我曾经需要的。
在 C# 和 Java 中,接口上的所有方法都是公共的。
在 Java 中,允许使用 public 关键字,可能会节省解析规则。在 C# 中,public 关键字被认为是多余的,并从接口声明中完全删除。
【讨论】: