我需要創建一個暴露IDictionary<K,V>
接口的對象,但我不想填寫整個接口實現。在C#中Java的AbstractMap等價於什麼?
這將是不錯的Java的AbstractDictionary,這讓你很少impelment一個完整的字典相當於(HashMap的,在Java):
- 如果您不需要重複收集,你有一個方法來實現(TryGetValue)
- 如果你希望它是可寫的,你可以實現另一個條目(Add)。
我需要創建一個暴露IDictionary<K,V>
接口的對象,但我不想填寫整個接口實現。在C#中Java的AbstractMap等價於什麼?
這將是不錯的Java的AbstractDictionary,這讓你很少impelment一個完整的字典相當於(HashMap的,在Java):
System.Collections.Generic
命名空間包含的IDictionary<K,V>
三種實現:Dictionary<TKey, TValue>
,SortedDictionary<TKey, TValue>
和SortedList<TKey, TValue>
。
如果我構建自己的字典類,我從System.Collections.ObjectModel.KeyedCollection繼承。
編輯爲所有那些誰不懂API設計。
你永遠不應該從公共屬性或函數返回一個通用的List或Dictionary。除此之外,你應該返回專門爲此目的建造的課程。通過這種方式,您可以在稍後添加其他功能。
Dictionay<integer, Order> Orders() {get;}
CustomerOrders Orders() {get;}
隨着第二個版本,你可以做一些事情,如添加一個Total屬性,並讓用戶真正找到它。
從理論上講,您可以返回添加Total屬性的Dictionary的子類,但用戶將不得不知道您正在做它,並且包含一個要轉到屬性的轉換。
爲什麼不使用提供的字典類? NET 2是你的嗎? – johnc 2008-12-04 07:56:11
Wintellect的PowerCollections library包括一個DictionaryBase
類(source code),它實現了大部分標準IDictionary < K,V>接口。從類文檔註釋:
DictionaryBase是一個基類, 可以用來更容易地實現 通用的IDictionary < T>和 非通用的IDictionary接口。
要使用DictionaryBase作爲基類, 派生類必須重寫計數, 的GetEnumerator,TryGetValue,清除, 刪除和索引set訪問。
我不認爲這回答了這個問題 - AbstractDictionary是一個抽象的基本框架實現,你繼承自。 – serg10 2008-12-05 15:55:58