为什么实现内部接口的方法必须公开

Arn*_*und 4 c# c#-4.0

我正在开发一个实现内部接口的内部类.任何人都可以解释为什么我不能将我的方法声明为内部,为什么我收到以下错误:"无法实现接口成员,因为它不公开".

我知道我必须将该方法声明为公开,但这对我来说绝对没有意义.

如果接口和类都是内部的,那么声明方法是公共的有什么意义呢?这不是误导吗?

在这个网站上看过一个相关的问题.这不完全是重复的,因为我的班级是内部的.

Jon*_*eet 11

简单地说:因为这是语言设计者设计它的方式.即使在内部接口中,这些方法也是隐式公开的.它确实使事情变得简单,但在其他方面却是一种痛苦.

如果你想要一个你想要"隐藏"内部接口使用的公共类,你可以使用显式接口实现 - 虽然这有其他缺点.

当然,如果你的类是内部的,那么无论如何方法都是公共的并不重要 - 其他程序集也无法调用方法,因为它们看不到类型.

我绝对同意C#(或一般的.NET)没有像内部接口那样仔细设计.

在方面究竟为什么你会得到一个错误消息-节中的C#4规格(接口映射)的13.4.4就是这个道理.只有非静态公共成员和显式接口成员实现才能找到实现 - 如果接口中有任何未实现的成员,则会发生错误.

  • @ArneLund:显式接口实现有时会产生令人惊讶的结果,并且很难/不可能在派生类中提供接口的*new*实现,该派生类首先调用基类中的现有接口.动态类型也失败了. (3认同)