2008-11-30 31 views

Respuesta

26

El valor de usar una interfaz es siempre el mismo: no es necesario cambiar el código de cliente cuando se cambia a otra implementación de back-end.

Considere que el perfil de su código muestra más adelante que una implementación de tabla hash (utilizada en la clase Dictionary) no es adecuada para su tarea y que un árbol de búsqueda binaria funcionaría mejor. Si ha codificado a una interfaz, cambiar la implementación es sencillo. Sin embargo, si has usado una clase concreta, tienes que cambiar mucho más código en muchos lugares más. => Esto cuesta tiempo y dinero.

14

IDictionary permite un acoplamiento más flexible.

Digamos que tienes un método como este:

void DoSomething(IDictionary<string, string> d) 
{ 
    //... 
} 

Usted puede utilizar de esta manera:

Dictionary<string, string> a = new Dictionary<string, string>(); 
SortedDictionary<string, string> b = new SortedDictionary<string, string>(); 
DoSomething(a); 
DoSomething(b); 
+0

Buen ejemplo para mostrar la diferencia – Karan

1

En base a su pregunta anterior Class inherits generic dictionary<string, IFoo> and Interface y la discusión de las respuestas, supongo tu preguntando más sobre heredar de en lugar de usar.

La implementación del diccionario está bien si está satisfecho con la forma en que se implementa el diccionario. Si quiere cambiar algo, entonces implementar IDictionary es mejor.

En mi humilde opinión, si va a cubrir un miembro existente con 'nuevo', entonces es mejor implementar la interfaz en lugar de heredar de la clase original.

Cuestiones relacionadas