¿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?
5
A
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
Cuestiones relacionadas
- 1. operador << (ostream Y, X) para la clase X anidado en una plantilla de clase
- 2. ¿Cómo se empareja la clase [X] para diferentes X?
- 3. ¿`X x = x = X();` legal C++?
- 4. ¿Qué hace (1U << X)?
- 5. ¿Qué significa (? <= X) en regex?
- 6. int x = 10; x + = x--; en .Net - ¿Por qué?
- 7. Los resultados de Java son diferentes para (int) Math.pow (2, x) y 1 << x
- 8. C# .NET 3.5: ¿Para qué se utiliza Expression <>?
- 9. Para cada x ... Siguiente vs. Para cada x ... Siguiente x
- 10. ¿Por qué la variable de miembro de clase x no se puede compartir (x) en OpenMP?
- 11. ¿Qué significa \ x en c/C++?
- 12. definir el uso (x) (x) = (x)
- 13. ¿Por qué (x + = x + = 1) se evalúa de manera diferente en C y Javascript?
- 14. Ocaml: Error - esta expresión tiene tipo X, pero se utiliza con el tipo de x
- 15. En la declaración "std :: vector <X> f();", ¿es "std :: vector <X>" una instanciación?
- 16. scalac -explaintypes: ¿Qué significa "<notype><: X?" ¿media?
- 17. C y C++ diferencia en sizeof ('x')
- 18. C++ IDE para OS X
- 19. polimorfismo C++ ((X *) y) -> foo() vs ((X) * y) .foo()
- 20. JS regexp (? <! X) A
- 21. Clase UIDevice para Mac OS X?
- 22. Encuentra todos los pares (x, y) en una matriz ordenada para que x + y <z
- 23. ¿Los compiladores modernos optimizan la operación x * 2 a x << 1?
- 24. C# List <> Ordena por x then y
- 25. ¿para qué se utiliza java.lang.reflect.Method.isBridge()?
- 26. Xerces-C: ¿Migración de v2.x a v3.x?
- 27. ¿Por qué debería usar operator.itemgetter (x) en lugar de [x]?
- 28. ¿Diferencia en la construcción del objeto usando "X x (42)" y "X x = 42"?
- 29. ¿Por qué std :: set :: lower_bound (x) (efectivamente) se define como el número más pequeño> = x en lugar del número más grande <= x?
- 30. C++ allocator <X> :: deallocate (NULL, 1) permitido?
¿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
Sí, es el X: X no el patrón CRTP. –
user580650