ich bin einige meiner Java-Code in C# zu portieren, und ich habe Probleme beim Replizieren dieses Verhalten:Shop generischer Typ Referenz in C#
***** Java-Code *****
public abstract class Fruit<T extends Fruit>{
//Fruit implementation
}
Das ist großartig, weil ich nur generische Typen, die Obst erweitern möchten. Dann kann ich eine Referenz für alle konkreten Fruchtobjekte wie folgt speichern:
Banana banana = new Banana(); //This class extends Fruit
Strawberry strawberry = new Strawberry(); //This class extends Fruit
Fruit fruit;
fruit = banana;
//or
fruit = strawberry;
Das funktioniert ganz gut. Jetzt versuche ich, das gleiche in C# und die Frucht-Klasse wird wie folgt erklärt:
***** C# -Code *****
abstract public class Fruit<T> where T : Fruit<T> {
//Fruit implementation
}
Aber in C#, kann ich nicht speichern einer Referenz wie folgt aus:
Fruit fruit; //This gives a compilation error!
ich nicht in der Lage bin, die Banane und die Erdbeere in der gleichen Referenz zu speichern, kann ich dies nur tun:
Fruit<Banana> fruit;
fruit = banana;
//or
Fruit<Strawberry> fruit;
fruit = strawberry;
glaube ich um es durch Zugabe einer Vererbungsstufe wie folgt zu erreichen:
abstract public class GenericFruit<T> where T : GenericFruit<T> {}
und erstellen Sie dann die Frucht Klasse von Obst wie diese äquivalent
abstract public class Fruit : GenericFruit<Fruit>{}
und jetzt Banane und Erdbeer erstreckt:
public class Banana : Fruit {}
public class Strawberry : Fruit {}
und speichern Sie dann eine Frucht Referenz:
Fruit fruit;
fruit = new Banana();
fruit = new Strawberry();
Aber das fühlt sich irgendwie wie Betrug an :( Irgendwelche Ideen? Mache ich etwas falsch?
Warum hast du '' nur 'public abstract class Fruit hinzugefügt {...} kann genau dasselbe! versuchen Sie es –
Maraboc
Hey @Maraboc, ich vergaß zu erwähnen, dass innerhalb der Fruit-Implementierung ich generische Rückgabetypen verwenden ... – loveMeansNothing
Ich bin nicht einmal sicher, was Sie versuchen, in den C# -Code zu erreichen. Sie erhalten den Kompilierungsfehler, weil Sie die Frucht auf einen Typ beschränkt haben und dann keinen Typ angeben. –