2010-03-12 16 views

Respuesta

9

Esto es algo engañoso, ya que una interfaz, por definición, no proporciona ninguna implementación.

Sin embargo, muchas partes de la infraestructura intentan hacer la vida más fácil, por lo que proporcionan un método que requiere una interfaz, pero también proporciona una sobrecarga sin parámetros. Un buen ejemplo es List<T>.Sort.

La documentación aquí está sugiriendo que, si se utiliza un método que normalmente requeriría una IComparer<T>, sino que lo utiliza a través de algún sobrecarga que no lo hace, obtendrá la referencia "aplicación por defecto" que se utiliza en su lugar.

Sin embargo, esto es realmente un "detalle de implementación" de clases no relacionadas con la interfaz en sí. Yo personalmente creo que esto es una mala elección de palabras de la documentación, y debe ser algo más como:

Muchos tipos en el marco dependen de una aplicación común de esta interfaz proporcionada por el Comparer clase.

Esto, en mi opinión, dar un significado más clara a esta ...

+1

me gusta mucho este tipo de explicaciones! =) –

+1

@Will: ¡Gracias! Hago lo mejor que puedo;) –

+0

Agregue algo. A veces, un marco utiliza el patrón de casos especiales (o el patrón de objeto nulo), y una implementación predeterminada de una interfaz puede ser parte del patrón. :) –

3

Significa que cuando llame al método Sort sin argumentos (sin especificar explícitamente a un comparador) usará esta implementación predeterminada.

0

Esto significa que esta clase es la que implementa la interfaz. Apunta al objeto que implementa la interfaz sin miembros derivados o heredados, pero claramente la interfaz. Esta es la clase que corresponde directamente a esta interfaz.

public interface IComparer { 
    // Some members to implement here. 
} 

public class Comparer : IComparer { 
    // IComparer members implementation 
} 
Cuestiones relacionadas