3

I need to create an object which exposes an IDictionary<K,V> interface, but I don't want to fill in the entire interface implemntation.

It would be nice to have the equivalent of Java's AbstractDictionary, which leaves you very little to impelment a complete dictionary (HashMap, in Java):

  • If you don't need to iterate the collection, you have a single method to implement (TryGetValue)
  • If you want it to be writeable, you implement another entry (Add).
4

3 回答 3

4

Wintellect 的PowerCollections 库包括一个实现大部分标准 IDictionary<K, V> 接口的DictionaryBase类(源代码)。从班级的文档评论中:

DictionaryBase 是一个基类,可用于更轻松地实现泛型 IDictionary<T> 和非泛型 IDictionary 接口。

要将 DictionaryBase 用作基类,派生类必须覆盖 Count、GetEnumerator、TryGetValue、Clear、Remove 和索引器集访问器。

于 2008-12-04T08:00:15.450 回答
3

System.Collections.Generic命名空间包含IDictionary<K,V>:Dictionary<TKey, TValue>和.SortedDictionary<TKey, TValue>的三个实现SortedList<TKey, TValue>

于 2008-12-04T07:09:45.363 回答
0

如果我正在构建自己的字典类,我会从 System.Collections.ObjectModel.KeyedCollection 继承。

为所有不了解 API 设计的人编辑。

您永远不应该从公共属性或函数返回通用列表或字典。Insead 你应该返回一个专门为此目的而构建的类。这样,您以后可以向其添加其他功能。

Dictionay<integer, Order> Orders() {get;}
CustomerOrders Orders() {get;}

在第二个版本中,您可以添加 Total 属性并让用户实际找到它。

理论上,您可以返回添加 Total 属性的 Dictionary 的子类,但是用户必须 A. 知道您正在执行此操作,并且 B. 包含强制转换才能访问该属性。

于 2008-12-04T07:52:51.080 回答