Ich kann die Verwendung für this code nicht herausfinden. Welchen Nutzen hat dieses Muster?Was nutzt dieser Code?
[Code wiederholt hier für die Nachwelt]
public class Turtle<T> where T : Turtle<T>
{
}
Ich kann die Verwendung für this code nicht herausfinden. Welchen Nutzen hat dieses Muster?Was nutzt dieser Code?
[Code wiederholt hier für die Nachwelt]
public class Turtle<T> where T : Turtle<T>
{
}
Mit diesem Muster können Sie im Wesentlichen auf eine konkrete Unterklasse innerhalb der Elternklasse verweisen Zum Beispiel:
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()
{
// ...
}
}
Im ersteren, ist festgelegt, dass ein SeaTurtle
‚s Baby ein SeaTurtle
sein wird.
Denkst du, diese Art von Ding wäre nicht erforderlich, wenn es eine Unterstützung für Kontravarianz gibt? – shahkalpesh
Es hat mehr Nutzen. Es kann Schnittstellen für die Unterklasse implementieren. Wie in Java verwendet 'java.lang.Enum' das Muster, um' java.lang.Comparable' für die Unterklasse zu implementieren. Ich bin sicher, C# hat etwas ähnliches. –
Es gibt sicherlich andere Verwendungen, aber alle beinhalten, dass die Elternklasse den Typ ihrer Unterklasse verwenden muss. Bezüglich der Implementierung von Schnittstellen haben Sie zwei Möglichkeiten: Implementieren Sie die Schnittstelle für T oder Turtle
Es gibt keinen Gebrauch, die ich sehen kann. Grundsätzlich ist es dasselbe wie
Es ist nicht das gleiche, weil in dem angegebenen Code "Turtle" nicht instanziiert werden kann. – strager
Ja, es kann ... den Kommentar von Marc Gravell hier http://stackoverflow.com/questions/194484/whats-the-strangest-corner-case-youve-seen-in-c-or-net/1332344#1332344 –
@Levesque, und siehe den folgenden Kommentar von RCIX. – strager
Ihre Schildkröten den ganzen Weg hinunter ... – Juliet
Wha !? Ich muss etwas vermissen ... –
Braucht mehr Schildkröten, wenn du mich fragst. – Corey