jaka jest wartość używania IDictionary tutaj?IDictionary <string, string> versus Dictionary <string, string>
Odpowiedz
Wartość korzystania z interfejsu jest zawsze taka sama: nie trzeba zmieniać kodu klienta podczas przełączania do innej implementacji backendu.
Należy pamiętać, że profilowanie kodu później pokazuje, że implementacja tabeli mieszania (używana w klasie Dictionary
) nie jest odpowiednia do zadania i że drzewo wyszukiwania binarnego będzie działało lepiej. Jeśli zakodowałeś interfejs, to przełączanie implementacji jest proste. Jeśli jednak używałeś konkretnej klasy, musisz zmienić o wiele więcej kodu w dużo większej liczbie miejsc. => To kosztuje czas i pieniądze.
IDictionary umożliwia luźniejsze sprzężenie.
Powiedzmy, że masz sposób jak poniżej:
void DoSomething(IDictionary<string, string> d)
{
//...
}
można go używać tak:
Dictionary<string, string> a = new Dictionary<string, string>();
SortedDictionary<string, string> b = new SortedDictionary<string, string>();
DoSomething(a);
DoSomething(b);
Bazując na poprzednim pytaniu Class inherits generic dictionary<string, IFoo>
and Interface i dyskusji w odpowiedzi, zgaduję twoja prośba bardziej o dziedziczenie zamiast używania.
Wdrażanie ze słownika jest w porządku, jeśli jesteś zadowolony ze sposobu, w jaki słownik jest zaimplementowany. Jeśli chcesz coś zmienić, wtedy implementacja IDictionary jest lepsza.
IMHO, jeśli zamierzasz zasłonić istniejącego członka słowem "nowy", lepiej jest zaimplementować interfejs niż dziedziczyć z oryginalnej klasy.
Dobry przykład pokazania różnicy – Karan