You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 09:57:38