可以在Dictionary继承的类中重新定义索引器吗?

时间:2017-07-24 12:53:24

标签: c# inheritance indexing operator-overloading

我正在尝试实现一个MultiDictionary:一个在每个键中包含List的字典。

我希望能够使用添加分配运算符索引器向字典添加元素:

myMultiDictionary[key] += elementToAdd;

我首先创建了一个自定义的AddableList,它继承了List并重载了+-运算符,让我使用了加法赋值运算符:

myAddableList += elementToAdd;

MultiDictionary是Dictionary<keyType, AddableList<contentType>>的简单继承。

我遇到了索引器问题。我希望保持Dictionary继承使用字典键的O(1)性能。但是,我必须重新定义索引器:

  • 如果我创建新密钥,则创建一个空列表;
  • 如果删除列表中的所有元素,请删除密钥。

继承如何为已定义索引器的类工作? 我的新索引器会覆盖字典中定义的所有访问方法吗?

1 个答案:

答案 0 :(得分:1)

由于Dictionary的索引器未标记为虚拟,因此您无法真正覆盖它。您只能通过添加新的&#39;来隐藏它。您的索引器的关键字,但不要这样做,任何人都可以将您的MultiDictionary向上转换为Dictionary并使用基类的索引器。对您而言,最佳解决方案是,您的MultiDictionary应该实现接口IDictionary,而不是从Dictionary继承,而不是在MultiDictionary内部保存私有Dictionary实例,并将所有接口实现重定向到Dictionary实例,而无需任何自定义逻辑。换句话说,只需在字典中创建代理。