我需要创建一个公开IDictionary<K,V>
接口的对象,但我不想填写整个接口实现。
拥有相当于Java的AbstractDictionary会很不错,这会让你很难推动完整的字典(HashMap,在Java中):
答案 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.包括一个转换来到达属性。