这段代码绝对没有错(前提是它不会让你的用户感到困惑),而且它不是一个我熟悉的任何名字的模式. CanDoThisAndThat
实现两个接口,因此客户端可以以任何一种方式使用它.
.NET允许以这种方式实现接口 - 称为显式接口实现.
在以下情况下显式接口实现很有用:
两个接口具有相同的成员定义
您需要实现一个接口,但不希望公开特定成员可用于未使用接口类型声明引用的客户端代码
.NET框架中的案例2的示例是ICollection.SyncLock
. List
实现ICollection
但是以下代码将无法编译,因为该成员故意被"隐藏",因为BCL的设计者不再提倡以这种方式锁定集合:
List
此格式的任何遗留代码仍然有效,因为引用的类型是ICollection
显式的:
ICollection list = new List(); lock (list.SyncRoot) // no problem { // ... }