Einzelnen Beitrag anzeigen

Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.641 Beiträge
 
#5

AW: [RTTI] verschiedene Generische klassen in Dictionary?

  Alt 24. Mai 2012, 17:53
Die Vererbung bei den Generics ist echt sch***, bzw. garnicht vorhanden.
Es gibt keinen Basistypen ala TConVar für dein TConVar<irgendwas>.

Rate mal, warum TList und TList<T> nicht kompatibel sind.

Soll heißen, wenn du mehrere Typen von einer generischen Klasse ableitest, dann sind diese nicht zueinander kompatibel.
Das ganze nennt sich Kovarianz bzw. Kontravarianz (covariance / contravariance) und kam auch in .NET erst einige Zeit nachdem Generics eingeführt wurden in (4.0).

Das Problem ist eigentlich nicht der Generic an sich, sondern das Problem der Kompatibiltät / Vererbunghierachie der generischen parameter.

Ein TConVar<string> und ein TConVar<MyCustomType> lassen sich in .NET dadurch höchstens auf TConVar<object> vereinheitlichen. Nutzt Du constraints kannst Du höchstens auf den Constraint-Typen gehen. Aber auch das muss der Compiler erst einmal 'wissen' und umsetzen, und bei nicht ganz so typsicheren Sprachen wie Delphi ist das dann nochmal ne ecke komplizierter als in einer Welt, wo zumindest mal sichergestellt ist, das wirklich ALLES von Object ableitet (selbst der Typ 'Type').

Hier gibts nochmal Hintergrundinfos über die komplette Problemklasse und wie sie in .NET funktioniert: http://msdn.microsoft.com/en-us/library/dd799517.aspx
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat