2010-03-12 8 views

risposta

9

Questo è in qualche modo fuorviante, poiché un'interfaccia, per definizione, non fornisce alcuna implementazione.

Tuttavia, molte parti del framework cercano di semplificare la vita, quindi forniscono un metodo che richiede un'interfaccia, ma fornisce anche un sovraccarico senza parametri. Un buon esempio è List<T>.Sort.

La documentazione suggerisce che, se si utilizza un metodo che normalmente richiede un IComparer<T>, ma lo si utilizza tramite un sovraccarico che non lo fa, verrà utilizzata l'implementazione predefinita di riferimento.

Tuttavia, questo è davvero un "dettaglio di implementazione" di classi non correlate all'interfaccia stessa. Personalmente penso che questa è una scelta povera di parole nella documentazione, e dovrebbe essere qualcosa di più simile a:

Molti tipi nel quadro contare su un'implementazione comune di questa interfaccia fornita da il Comparer classe.

Questo sarebbe, a mio parere, di fornire un significato più chiaro a questo ...

+1

Mi piace molto queste spiegazioni! =) –

+1

@Will: Grazie! Faccio del mio meglio;) –

+0

Aggiungi qualcosa. A volte, un framework utilizza il modello Special Cases (o il pattern Null Object) e un'implementazione predefinita di un'interfaccia può far parte del pattern. :) –

3

Significa che quando si chiama il metodo Sort senza argomento (senza specificare esplicitamente un confronto) verrà utilizzata questa implementazione predefinita.

0

Ciò significa che questa classe è quella che implementa l'interfaccia. Punta all'oggetto che implementa l'interfaccia stessa senza alcun membro derivato o ereditato, ma chiaramente l'interfaccia. Questa è la classe che corrisponde circolarmente a questa interfaccia.

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

public class Comparer : IComparer { 
    // IComparer members implementation 
} 
Problemi correlati