Polymorphie und Generics

16/09/2007 - 19:30 von Pizzamaka | Report spam
Ich hab da n kleines Problem, was eigentlich funktionieren müsste.

Das sind meine Datentypen:
public abstract MyType
{ ... }

public class MySpecialType : MyType
{ ... }


Dann hab ich eine eigene abstrakte Collection die von LinkedList erben
weitere Collections die wiederrum von dieser erben.

public abstract MyCollection<Typ> : LinkedList<Typ>
where Typ : MyType
{ ... }
public class MySpecialCollection : MyCollection<MySpecialType>
{ ... }




Soweit war die Welt noch in Ordnung und alle waren glücklich und zufrieden.
Dann allerdings kam die böse Füll-Methode...

public static Typ fillCollection<Typ>( Typ collection )
where Typ : MyCollection<mySpecialType>
{ ... }




Laut meinem verstàndniss ist nun ein Objekt von Typ MySpecialCollection nach
dem Prinzip der Polymorphie auch vom Typ MyCollection. Allerdings führt der
BefehlC#-Code:
fillCollection(new MySpecialCollection());



zu einem Fehler, der sagt dass MySpecialCollection zunàchst zu
MyCollection<Typ> convertiert werden muss. Diesen Fehler verstand der arme,
dumme Programmierer aber leider nicht und hofft nun dankbar auf eine Lösung...
 

Lesen sie die antworten

#1 Marc Ambrosius
17/09/2007 - 10:44 | Warnen spam
Pizzamaka schrieb:
Laut meinem verstàndniss ist nun ein Objekt von Typ MySpecialCollection nach
dem Prinzip der Polymorphie auch vom Typ MyCollection. Allerdings führt der
BefehlC#-Code:
fillCollection(new MySpecialCollection());

zu einem Fehler, der sagt dass MySpecialCollection zunàchst zu
MyCollection<Typ> convertiert werden muss. Diesen Fehler verstand der arme,
dumme Programmierer aber leider nicht und hofft nun dankbar auf eine Lösung...


Sollte eigentlich funktionieren:

namespace GenricsTest
{
public abstract class MyType{}

public class MySpecialType : MyType{}

public abstract class MyCollection<Typ> : LinkedList<Typ> where Typ
: MyType {}

public class MySpecialCollection : MyCollection<MySpecialType>{}

class Program
{
public static Typ fillCollection<Typ>(Typ collection)
where Typ : MyCollection<MySpecialType>{}
static void Main(string[] args)
{ fillCollection(new MySpecialCollection()); }
}
}

Marc

Ähnliche fragen