Welchen Wert hat IDictionary hier?IDictionary <string, string> versus Dictionary <string, string>
Antwort
Der Wert für die Verwendung einer Schnittstelle ist immer derselbe: Sie müssen den Clientcode beim Wechseln zu einer anderen Back-End-Implementierung nicht ändern.
Beachten Sie, dass das Profiling Ihres Codes später zeigt, dass eine Hashtabellenimplementierung (verwendet in der Dictionary
-Klasse) nicht für Ihre Aufgabe geeignet ist und dass ein binärer Suchbaum besser funktioniert. Wenn Sie eine Schnittstelle programmiert haben, ist der Wechsel der Implementierung einfach. Wenn Sie jedoch eine konkrete Klasse verwendet haben, müssen Sie viel mehr Code an viel mehr Stellen ändern. => Das kostet Zeit und Geld.
IDictionary ermöglicht lockerere Kopplung.
Sagen Sie bitte ein Verfahren wie dieses:
void DoSomething(IDictionary<string, string> d)
{
//...
}
Sie es wie folgt verwenden können:
Dictionary<string, string> a = new Dictionary<string, string>();
SortedDictionary<string, string> b = new SortedDictionary<string, string>();
DoSomething(a);
DoSomething(b);
Auf der Grundlage Ihrer vorherigen Frage Class inherits generic dictionary<string, IFoo>
and Interface und die Diskussion in den Antworten, ich bin zu raten, Sie fragen eher nach, als von etwas zu erben.
Implementierung von Dictionary ist in Ordnung, wenn Sie mit dem Weg Wörterbuch glücklich ist implementiert. Wenn Sie etwas ändern möchten, ist die Implementierung von IDictionary besser.
IMHO Wenn Sie ein vorhandenes Mitglied mit 'neu' abdecken wollen, dann ist es besser, die Schnittstelle zu implementieren, anstatt von der ursprünglichen Klasse zu erben.
- 1. IDictionary <string, string> oder NameValueCollection
- 2. IDictionary <string, string> oder NameValueCollection
- 3. Wert des Typs '(Benutzer) -> Dictionary <String, String>' kann nicht zum erwarteten Argumenttyp 'Dictionary <String, String>'
- 4. WPF-Bindungslistenansicht zu Dictionary <string, Dictionary <string, bool >>
- 5. C# Cast Dictionary <String, AnyType> zu Dictionary <String, Objekt> (Involving Reflection)
- 6. Wie konvertiert `Dictionary <string, Wörterbuch <string, List <myCustomClass >>>` auf `Dictionary <string, List <myCustomClass >>`
- 7. C# Konvertieren Liste <string> zu Dictionary <string, string>
- 8. Warum kann ich kein Wörterbuch <string, dictionary <string, string >> erstellen?
- 9. Serialisierung von IDictionary <string, object> in WCF
- 10. Vergleichen von 2 Dictionary <string, string> Instanzen
- 11. LINQ-Abfrage zum Zurückgeben eines Dictionary <string, string>
- 12. Wie man Dictionary <string, string> durch WCF serialisiert?
- 13. Erhalte ersten Schlüssel von Dictionary <string, string>
- 14. IDictionary <,> Kontravarianz?
- 15. Wie Groß- und Kleinschreibung in IDictionary <string, string> außer Kraft zu setzen
- 16. EJS: <% = versus <% -
- 17. Wie verwende ich LINQ, um eine <string, list <string>> auf <string, string> zu reduzieren?
- 18. Wie IDictionary <string, object> in Fluent NHibernate zugeordnet?
- 19. Wie IDictionary <string, Entity> in Fluent NHibernate
- 20. lesen SQL Tabelle in Dictionary <string, List <string[]>>
- 21. Wie Wert von Key in List <Dictionary <string, string >> in C#
- 22. Leistung von Dictionary <string, Objekt> vs Liste <string> + BinarySearch
- 23. Konvertieren Sie das Wörterbuch <String,Int> in Dictionary <String, SomeEnum> mit LINQ?
- 24. Arraylist <HashMap <String, String >> zu String []
- 25. Was ist schneller/effizienter: Dictionary <string, object> oder Dictionary <enum,object>?
- 26. NSJSONSerialization schlägt fehl beim Einbetten in Dictionary <String, AnyObject?>. Erfolgt beim Umwandeln in Dictionary <String, AnyObject>
- 27. Wie kann ContainsKey (Zeichenfolgenschlüssel) eine KeyNotFoundException für ein Dictionary ausgeben <string, string>?
- 28. Was ist eine bessere Alternative zu der folgenden Datenstruktur: Dictionary <string, Wörterbuch <string, string >>
- 29. For-Each-Schleife, Karte <String, Map <String, Liste <String> >>
- 30. NEST-Mapping von Dictionary <string, object>
Gutes Beispiel für den Unterschied – Karan