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

3

我正在尝试实现一个MultiDictionary:一个在每个键中保存列表的词典。

我希望能够使用加法赋值运算符索引器向字典中添加元素:

myMultiDictionary[key] += elementToAdd;

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

myAddableList += elementToAdd;

MultiDictionary只是Dictionary<keyType, AddableList<contentType>>的简单继承。
我在索引器方面遇到了问题。我希望保留Dictionary的继承以使用字典键的O(1)性能。但是,我必须重新定义索引器:
  • 如果我创建一个新键,则创建一个空列表;
  • 如果我删除列表中的所有元素,则删除键。
对于已经定义索引器的类,继承如何工作? 我的新索引器会覆盖字典中定义的所有访问方法吗?
1个回答

4
由于字典的索引器没有标记为虚拟,因此您无法真正地覆盖它。您只能通过在索引器中添加“new”关键字来隐藏它,但不要这样做,任何人都可以将您的MultiDictionary向上转换为Dictionary并使用基类的索引器。最好的解决方案是,您的MultiDictionary不应继承自Dictionary,而应实现IDictionary接口,然后在MultiDictionary内部持有一个私有的Dictionary实例,并将所有接口实现重定向到Dictionary实例,而不需要任何自定义逻辑。换句话说,只需创建代理即可实现对Dictionary的访问。

1
"组合优于继承" - 我不应该忘记这个。这是一个很好的解决方案,非常感谢。 - Queder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接