在C#中Java的AbstractMap相当于什么?

时间:2008-12-04 06:21:23

标签: c# java collections dictionary

我需要创建一个公开IDictionary<K,V>接口的对象,但我不想填写整个接口实现。

拥有相当于Java的AbstractDictionary会很不错,这会让你很难推动完整的字典(HashMap,在Java中):

  • 如果您不需要迭代集合,那么您只需要一个方法来实现(TryGetValue)
  • 如果您希望它可写,请实现另一个条目(添加)。

3 个答案:

答案 0 :(得分:4)

Wintellect的PowerCollections library包含一个DictionaryBase类(source code),它实现了大部分标准IDictionary&lt; K,V&gt;接口。从课堂上的文档评论:

  

DictionaryBase是一个基类   可以用来更容易实现   通用IDictionary&lt; T&gt;和   非通用IDictionary接口。

     

使用DictionaryBase作为基类,   派生类必须覆盖Count,   GetEnumerator,TryGetValue,Clear,   删除,索引器设置访问器。

答案 1 :(得分:3)

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

答案 2 :(得分:0)

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

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

您永远不应该从公共属性或函数返回通用列表或词典。你应该返回专门为此目的建造的课程。这样,您可以稍后为其添加其他功能。

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

使用第二个版本,您可以执行诸如添加Total属性之类的操作,并让用户实际找到它。

理论上你可以返回一个添加Total属性的Dictionary子类,但是用户必须知道你正在做它,并且B.包括一个转换来到达属性。