Generics - Übergeordnete Klasse verwenden, um Typ in Generics anzugeben

8

Ich betrachte etwas Kovarianz / Kontravarianz Zeug, ich habe eine viel breitere Frage, aber alles läuft darauf hinaus:

%Vor%

Dies funktioniert nicht, obwohl BaseEntity die abstrakte Elternklasse von ProductStyle ist, gibt es eine Möglichkeit, dies zu erreichen?

    
Daniel Dawes 13.08.2013, 11:56
quelle

2 Antworten

6

Der einzige Weg, dies zu tun, ist mit einer generischen Beschränkung out (die es schwer macht, Objekte zu speichern, aber gut, sie zu erhalten), auf einem interface (nicht% Code%). Wenn Sie Folgendes haben:

%Vor%

dann kann class einer Variablen vom Typ IGenericRepository<ProductStyle> zugewiesen werden, da alle IGenericRepository<BaseEntity> auch ProductStyle sind und wir uns auf die Verwendung von covariant / BaseEntity beschränkt haben:

%Vor%

Beachten Sie jedoch, dass diese Verwendung von covariant / out Folgendes unmöglich macht:

%Vor%     
Marc Gravell 13.08.2013, 12:02
quelle
0

Ich frage mich nur, ob so etwas auch nützlich wäre - mit einer Beschränkung der Definition Ihres GenericRepository, das den Basistyp T begrenzt:

%Vor%

Wenn Sie also eine Methode GetRepo<T> haben, könnte diese Methode ein GenericRepository von T zurückgeben, und Sie sind sicher, dass T ein Kind von BaseEntity ist.

    
David Hoerster 13.08.2013 12:16
quelle

Tags und Links