当类实现接口时,接口成员的类型修饰符应该是公共的。为什么会有这样的限制?
答案 0 :(得分:3)
接口定义了其他对象如何与实现该接口的类型的对象进行通信;由于其他对象只能与其他类型的公共属性和方法交互,因此接口必须将这些属性和方法定义为公共属性。
答案 1 :(得分:1)
实现接口方法有两种方法;第一个是隐式实现 - 它假设公共API暴露了接口方法,并且是你无疑看到的。
但是,您也可以使用显式实现:
void IDisposable.Dispose() {
// clean up
}
是一个微不足道的例子;这是私有的,但满足界面。显式实现始终优先于公共API上的类似命名方法。
事实上,显式实现通常是必要的,例如实现IEnumerable<T>
- 因为有两个冲突的GetEnumerator()
方法;以下是常见的:
// public API will be used for implicit IEnumerable<T>.GetEnumerator()
public IEnumerator<T> GetEnumerator() { ... do work ... }
// explicit implementation of IEnumerable.GetEnumerator()
IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); }
所以:如果你不想要公众成员;使用显式实现。
答案 2 :(得分:0)
让我们说一个接口可以有私人成员。当类继承接口时,该类将永远无法访问私有成员。该类永远无法实现私有成员,程序永远不会被编译。