2011-01-18 10 views
5

A cosa serve questo motivo? si noti che è diverso dal C++ "modello di modello curiosamente ricorrente".classe X: X <T> {} schema in C#: a cosa serve?

+3

Vuoi dire 'classe X: T '? Se è così, questo * è * il modello di modello curiosamente ricorrente. Nota che se il tuo titolo è corretto, 'X' e' X 'sono in realtà due tipi diversi; avremmo bisogno di vedere un esempio di tale uso. – cdhowie

+0

Sì, è il X: X non il modello CRTP. – user580650

risposta

4

Avere la classe generica di antenato sapere che il discendente effettivo che ne eredita aiuta in scenari in cui l'antenato generico deve esporre una determinata classe discendente non generica come parte del contratto del risultato del discendente non generico.

Un esempio comune è un metodo factory dichiarato l'antenato generico:

public class Parent<T> 
    where T : Parent<T>, new 
{ 
    public static T Create() 
    { 
     return new T(); // would be typically something more sophisticated 
    } 
} 

public class Child : Parent<Child> 
{ 
} 

Il vantaggio principale di questo concetto è il codice-deduplicazione.

+0

Non è di nuovo questo il modello di modello curiosamente ricorrente? Il post si occupa della classe X: X , non della classe X: Y .... – womp