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.
- 1. Jak przekonwertować Dictionary <string, object> do Dictionary <string, string> w C#
- 2. Jak zastąpić wielkości liter w IDictionary <string, string>
- 3. NEST odwzorowanie Dictionary <string, object>
- 4. Serialize Dictionary <string, string> w określonym formacie
- 5. Przesyłanie parametru Dictionary <string, string> w api WWW
- 6. Konwersja kwerendy LINQ do Dictionary <string, string []>
- 7. ArrayList <HashMap <String, String >> do String []
- 8. Czytaj SQL Tabela do Dictionary <string, List <string[]>>
- 9. Jak mapować IDictionary <string, Entity> w Fluent NHibernate
- 10. Szukasz alterantive do listy <KeyValuePair <string, KeyValuePair <string, string >>>
- 11. Jak przekonwertować NSDictionary na Swift Dictionary <String, NSObject>?
- 12. Nie można rzutować HashMap <String, String> na interfejs rozszerzający mapę <String, String>
- 13. Get ArrayList <HashMap <String, String >> ceni
- 14. inicjalizacji map <string, wektor <string>>
- 15. JAXB do unmarshall <string> foobar</string>
- 16. konwertować EnumerableRowCollection <string> do listy <string>
- 17. IDictionary <,> Kontrawariancja?
- 18. Marshal a java.util.Map <String, String>
- 19. java.util.Properties Vs java.util.Map <String, String>
- 20. EJS: <% = versus <% -
- 21. Konwertuj identyfikator <string, string> keys na małe litery (C#)
- 22. Zastosowanie FlurryAgent.onEvent (String eventid, mapa <String, String> Parametry)
- 23. Wysyłanie tablicę JSON być odbierane jako Dictionary <string, string>
- 24. Jak mogę przekonwertować DataTable na IEnumerable <Dictionary <string, object >>?
- 25. Konwertuj słownik <String,Int> na słownik <String, SomeEnum> używając LINQ?
- 26. Porównaj listę <String[]>
- 27. Słownik Javy <String, List <Object>>
- 28. Przekazywanie listy <String> do String ... parametr
- 29. Konwersja Map <String, String> w json
- 30. Generuj mapę <String, String> z POJO
Dobry przykład pokazania różnicy – Karan