Что эквивалентно абстрактной Java-карте в C #? - PullRequest
3 голосов
/ 04 декабря 2008

Мне нужно создать объект, который предоставляет интерфейс IDictionary<K,V>, но я не хочу заполнять всю реализацию интерфейса.

Было бы неплохо иметь эквивалент JavaD AbstractDictionary, который оставляет вам очень мало для создания полного словаря (HashMap, в Java):

  • Если вам не нужно повторять коллекцию, у вас есть один метод для реализации (TryGetValue)
  • Если вы хотите, чтобы он был доступен для записи, добавьте еще одну запись (Добавить).

Ответы [ 3 ]

4 голосов
/ 04 декабря 2008

Wintellect Библиотека PowerCollections включает класс DictionaryBase ( исходный код ), который реализует большую часть стандартного интерфейса IDictionary . Из комментариев к документации класса:

DictionaryBase - базовый класс, который может быть использован для более простой реализации универсальный IDictionary и неуниверсальные интерфейсы IDictionary.

Чтобы использовать DictionaryBase в качестве базового класса, производный класс должен переопределить Count, GetEnumerator, TryGetValue, Очистить, Удалите, и индексатор установит средство доступа.

3 голосов
/ 04 декабря 2008
Пространство имен

System.Collections.Generic содержит три реализации IDictionary<K,V>: Dictionary<TKey, TValue>, SortedDictionary<TKey, TValue> и SortedList<TKey, TValue>.

0 голосов
/ 04 декабря 2008

Если я создаю свой собственный класс словаря, я наследую от System.Collections.ObjectModel.KeyedCollection.

РЕДАКТИРОВАТЬ для всех тех, кто не понимает дизайн API.

Вы никогда не должны возвращать общий список или словарь из открытого свойства или функции. Insead вы должны вернуть класс, специально созданный для этой цели. Таким образом, вы можете добавить дополнительные функции позже.

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

Со второй версией вы можете делать такие вещи, как добавление свойства Total и сделать так, чтобы пользователь действительно его нашел.

Теоретически вы можете вернуть подкласс Dictionary, который добавляет свойство Total, но тогда пользователь должен будет A. знать, что вы это делаете, и B. включить приведение к этому свойству.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...