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

标签 c# inheritance indexing operator-overloading

我正在尝试实现一个 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/

相关文章:

c++ - 静态函数和非虚拟方法可以被覆盖吗?什么是静态多态?

google-app-engine - 在 GAE 的大表中索引 "explode"的速度是多少?

sql-server - 请帮我做这个查询(sql server 2008)

mysql - 当字段值不明确时如何优化 MySQL 查询

c# - 如何使用自定义路由缓存图像文件返回图像文件?

java - 将需要的变量发送到子类方法 - 作为方法属性或作为 protected 类属性

java - 抽象类中的同步

c# - HIDAPI - 在 c# 项目中使用

c# - 如何在数据网格初始化时将 WPF 数据网格的 SortDirection 设置为升序

c# - 只读取 HTML 文件的标题和/或 META 标签,不加载完整的 HTML 文件