我正在尝试实现一个 MultiDictionary:一个在每个键中包含一个列表的字典。
我希望能够使用加法赋值运算符 和索引器 向字典中添加元素:
myMultiDictionary[key] += elementToAdd;
我首先创建了一个自定义的 AddableList,它继承自 List 并重载了 +
和 -
运算符,让我使用加法赋值运算符:
myAddableList += elementToAdd;
MultiDictionary 是对Dictionary<keyType, AddableList<contentType>>
的简单继承。 .
我在使用索引器时遇到问题。我希望保留字典继承以使用字典键的 O(1) 性能。但是,我必须将索引器重新定义为:
- 如果我创建一个新 key ,则创建一个空列表;
- 如果我删除了列表中的所有元素,则删除一个键。
对于已经定义了索引器的类,继承是如何工作的? 我的新索引器会覆盖字典中定义的所有访问方法吗?
最佳答案
由于 Dictionary 的索引器未标记为虚拟的,因此您无法真正覆盖它。您只能通过向索引器添加"new"关键字来隐藏它,但不要这样做,任何人都可以将您的 MultiDictionary 升级为 Dictionary 并使用基类的索引器。最适合您的解决方案是,您的 MultiDictionary 应该实现一个接口(interface) IDictionary,而不是从 Dictionary 继承,而不是在 MultiDictionary 内部持有私有(private) Dictionary 实例,并将所有没有任何自定义逻辑的接口(interface)实现重定向到 Dictionary 实例。换句话说,只需创建字典的代理。
关于c# - 可以在 Dictionary 继承的类中重新定义索引器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45281190/