接口的公共类型修饰符

时间:2011-05-03 10:38:17

标签: c# interface

当类实现接口时,接口成员的类型修饰符应该是公共的。为什么会有这样的限制?

3 个答案:

答案 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)

让我们说一个接口可以有私人成员。当类继承接口时,该类将永远无法访问私有成员。该类永远无法实现私有成员,程序永远不会被编译。