IDictionary <строка, строка> и словарь <строка, строка> - PullRequest
12 голосов
/ 30 ноября 2008

Каково значение использования IDictionary здесь?

Ответы [ 3 ]

27 голосов
/ 30 ноября 2008

Значение использования интерфейса всегда одинаково: вам не нужно менять клиентский код при переключении на другую реализацию бэкэнда.

Учтите, что профилирование вашего кода позже показывает, что реализация хеш-таблицы (используемая в классе Dictionary) не подходит для вашей задачи и что двоичное дерево поиска будет работать лучше. Если вы закодировали интерфейс, переключить реализацию просто. Однако, если вы использовали конкретный класс, вам нужно изменить намного больше кода в гораздо большем количестве мест. => Это стоит времени и денег.

15 голосов
/ 30 ноября 2008

IDictionary включает более слабую связь.

Скажем, у вас есть такой метод:

void DoSomething(IDictionary<string, string> d)
{
   //...
}

Вы можете использовать его так:

Dictionary<string, string> a = new Dictionary<string, string>();
SortedDictionary<string, string> b = new SortedDictionary<string, string>();
DoSomething(a);
DoSomething(b);
1 голос
/ 30 ноября 2008

Исходя из вашего предыдущего вопроса Класс наследует общий dictionary<string, IFoo> и интерфейс и обсуждение в ответах, я думаю, вы спрашиваете больше о наследовании, а не об использовании.

Реализация из Словаря - это хорошо, если вы довольны тем, как реализован словарь. Если вы хотите что-то изменить, лучше реализовать IDictionary.

ИМХО, если вы собираетесь покрыть существующий член 'новым', лучше реализовать интерфейс, а не наследовать от исходного класса.

...