为何Dictionary<TKey, TValue>存在私有接口方法?
问题解决:委托IDictionary的CopyTo方法及显式接口实现的疑问
为什么会报错?
Dictionary<TKey, TValue>的CopyTo方法是显式接口实现,它归属于ICollection<KeyValuePair<TKey, TValue>>接口。显式实现的接口方法在类实例上默认是不可见的(等效私有访问级别),所以直接通过dictionary.CopyTo(...)调用会被IDE判定为访问私有成员。
如何正确委托CopyTo?
只需把内部的Dictionary实例转换为ICollection<KeyValuePair<TName, TValue>>接口类型,再调用CopyTo方法即可,修改后的代码如下:
public void CopyTo(KeyValuePair<TName, TValue>[] array, int arrayIndex) { ((ICollection<KeyValuePair<TName, TValue>>)dictionary).CopyTo(array, arrayIndex); }
为什么接口方法能被私有实现?
这种写法叫做显式接口实现,主要用于以下场景:
- 解决类实现多接口时的方法名冲突问题;
- 当接口方法语义和类自身设计不匹配时,隐藏这些方法,仅允许通过接口引用访问;
- 精简类的公共API,只暴露符合类定位的方法。
显式实现的接口方法不能添加访问修饰符,默认仅能通过对应接口的引用调用,在类实例上直接不可见。
内容的提问来源于stack exchange,提问作者user1779304
相关产品推荐
相关产品推荐

