IDictionary <строка, строкa> и словарь <строка, строкa>

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

Ответ 1

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

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

Ответ 2

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);

Ответ 3

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

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

IMHO, если вы собираетесь охватить существующего участника "новым", тогда лучше реализовать интерфейс, а не наследовать от исходного класса.