no puedo averiguar el uso de this code. ¿De qué sirve este patrón?¿De qué sirve este código?
[código repetidos aquí para la posteridad]
public class Turtle<T> where T : Turtle<T>
{
}
no puedo averiguar el uso de this code. ¿De qué sirve este patrón?¿De qué sirve este código?
[código repetidos aquí para la posteridad]
public class Turtle<T> where T : Turtle<T>
{
}
Este patrón esencialmente le permite referirse a una subclase concreta dentro de la clase padre. Por ejemplo:
public abstract class Turtle<T> where T : Turtle<T>
{
public abstract T Procreate();
}
public class SeaTurtle : Turtle<SeaTurtle>
{
public override SeaTurtle Procreate()
{
// ...
}
}
Versus:
public abstract class Turtle
{
public abstract Turtle Procreate();
}
public class SnappingTurtle : Turtle
{
public override Turtle Procreate()
{
// ...
}
}
En el primer caso, se especifica que un SeaTurtle
's bebé será un SeaTurtle
.
Qué le parece, no sería necesario este tipo de cosas, si hay apoyo para la varianza contraindicación? – shahkalpesh
Tiene más usos. Puede implementar interfaces para la subclase. Al igual que en Java, 'java.lang.Enum' utiliza el patrón para implementar' java.lang.Comparable' para la subclase. Estoy seguro de que C# tiene algo similar. –
Es cierto que hay otros usos, pero todos ellos implican la clase padre necesidad de utilizar el tipo de su subclase. En cuanto a la implementación de interfaces, tiene dos opciones: implementar la interfaz para T o Turtle
No sirve de nada que yo pueda ver. Básicamente, es el mismo que
public class Turtle
{
}
No es lo mismo porque en el código proporcionado, 'Tortuga' no se puede crear una instancia. – strager
Sí se puede ... ver comentario de Marc Gravell aquí http://stackoverflow.com/questions/194484/whats-the-strangest-corner-case-youve-seen-in-c-or-net/1332344#1332344 –
@Levesque, Y vea el comentario de RCIX siguiente. – strager
Su tortugas hasta el fondo ... – Juliet
Wha !? Tengo que extrañar algo ... –
Necesita más tortugas, si me preguntas. – Corey