2008-11-30 24 views

Odpowiedz

26

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.

14

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

Dobry przykład pokazania różnicy – Karan

1

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.

Powiązane problemy