2011-01-18 17 views
5

¿Para qué se utiliza este patrón? tenga en cuenta que es diferente del C++ "patrón de plantilla curiosamente recurrente".clase X: X <T> {} patrón en C# --- ¿para qué se utiliza?

+3

¿Quiere decir 'clase X: T '? Si es así, este * es * el patrón de plantilla curiosamente recurrente. Tenga en cuenta que si su título es correcto, 'X' y' X 'son en realidad dos tipos diferentes; necesitaríamos ver un ejemplo de tal uso. – cdhowie

+0

Sí, es el X: X no el patrón CRTP. – user580650

Respuesta

4

Tener la clase ancestro genérica sabe que el descendiente real que hereda de ella ayuda en escenarios donde el antecesor genérico necesita exponer una clase descendiente no genérica particular como parte del propio contrato de resultado del descendiente no genérico.

Un ejemplo común es un método de fábrica declarada en el ancestro genérico:

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> 
{ 
} 

La principal ventaja de este concepto es de código deduplicación.

+0

¿No es esto solo el patrón de Plantilla Curiosamente Recurrente de nuevo? La publicación pregunta por la clase X: X , no la clase X: Y .... – womp

Cuestiones relacionadas