簡體   English   中英

在C#中Java的AbstractMap相當於什么?

[英]What is the equivalent of Java's AbstractMap in C#?

我需要創建一個公開IDictionary<K,V>接口的對象,但我不想填寫整個接口實現。

擁有相當於Java的AbstractDictionary會很不錯,這使得你很少能夠推動完整的字典(HashMap,在Java中):

  • 如果您不需要迭代集合,那么您只需要一個方法來實現(TryGetValue)
  • 如果您希望它可寫,則實現另一個條目(添加)。

Wintellect的PowerCollections庫包含一個DictionaryBase類( 源代碼 ),它實現了大多數標准IDictionary <K,V>接口。 從課堂上的文檔評論:

DictionaryBase是一個基類,可用於更輕松地實現泛型IDictionary <T>和非泛型IDictionary接口。

要將DictionaryBase用作基類,派生類必須覆蓋Count,GetEnumerator,TryGetValue,Clear,Remove和索引器集訪問器。

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子類,但是用戶必須知道你正在做它,並且B.包含一個轉換來獲取屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM