C# 接口的公共类型修饰符

C# 接口的公共类型修饰符,c#,interface,C#,Interface,当类实现接口时,接口成员的类型修饰符应该是公共的。为何会有这样的限制 有两种实现接口方法的方法;第一个是隐式实现——它假设公共API公开接口方法,这无疑是您所看到的 但是,您也可以使用显式实现: void IDisposable.Dispose() { // clean up } 是一个微不足道的例子;这是私有的,但满足接口。在公共API上,显式实现始终优先于类似命名的方法 事实上,显式实现通常是必要的,例如实现IEnumerable——因为有两个冲突的GetEnumerator()方

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

有两种实现接口方法的方法;第一个是隐式实现——它假设公共API公开接口方法,这无疑是您所看到的

但是,您也可以使用显式实现:

void IDisposable.Dispose() {
    // clean up
}
是一个微不足道的例子;这是私有的,但满足接口。在公共API上,显式实现始终优先于类似命名的方法

事实上,显式实现通常是必要的,例如实现
IEnumerable
——因为有两个冲突的
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(); }
//公共API将用于隐式IEnumerable.GetEnumerator()
公共IEnumerator GetEnumerator(){…执行工作…}
//IEnumerable.GetEnumerator()的显式实现
IEnumerator IEnumerable.GetEnumerator(){返回GetEnumerator();}

所以:如果你不想要公众成员;使用显式实现。

接口定义其他对象如何与实现该接口的类型的对象通信;由于其他对象只能与其他类型的公共属性和方法交互,因此接口必须将这些属性和方法定义为公共。

假设接口可以有私有成员。当类继承接口时,该类将永远无法访问私有成员。该类永远无法实现私有成员,程序也永远无法编译。

除非它们不需要是公共的。。。在技术上我同意,我确实考虑了一个明确的接口来定义一个类型的公共合同;类型实现该接口的事实是其公共定义的一部分,因此获取这些接口成员既简单又有保证/需要。Private定义了类型封装和隐藏的内容,而接口实际上不是.mempublic的一部分?另外:您所说的“类型修饰符”是指“可访问性修饰符”吗?接口成员是隐式公开的。而不是执行。