Der ganze Sinn der Schnittstellen zu schaffen, ... na ja eine Schnittstelle zu jedem beliebigen Modul (ich benutze hier "Modul" in einem weiten Sinn), so dass sich der Anrufercode nicht darum kümmern muss, wie diese spezielle Schnittstelle implementiert wird.
Wie "Wie kann IDictionary
Schnittstelle initialisiert werden", ist dies technisch nicht korrekt. Was initialisiert werden kann, ist eine Variable, deren Typ IDictionary<T, V>
ist. Sicher genug Variablen müssen initialisiert werden, aber das ist normalerweise vor dem "Client-Code" verborgen.
IDictionary
ist jedoch nicht sehr repräsentativ. Betrachten Sie stattdessen eine IDataReader
Schnittstelle. Sie haben sicherlich mit ADO.NET behandelt, so sollte dies bekannt vorkommen:
public Foo PopulateFromDataReader(SqlDataReader dataReader)
Diese besondere Methode fest an einem SqlDataReader
gekoppelt ist, so dass Sie es neu schreiben müssen, würde für sie zu unterstützen, sagen wir, Access oder Oracle oder MySQL oder Firebird oder was auch immer. Mit anderen Worten, Sie sind auf die Implementierung angewiesen.
Nun betrachten:
public Foo PopulateFromDataReader(IDataReader dataReader)
Diese Methode kann mit dem, was Klasse verwendet werden, die IDataReader
implementiert, die mit grundsätzlich jedem ADO.NET-kompatiblen Datenprovider bedeutet.
+1 Sehr schönes Beispiel .. :) Sie räumten die Diff, die mich verwirren machte ... großes Beispiel. –