Wie wird ein generischer Typparameter als Typparameter für eine Eigenschaft verwendet, die als Schnittstelle mit Typabhängigkeiten deklariert ist?

8

Wie deklariere und verwende ich generische Interfaces (siehe Namespace Sample2), um auf die gleiche Weise wie mit Klassen im Namespace Sample1 zu arbeiten?

Ich weiß, dass es eine Problemumgehung gibt (siehe Namespace Sample2Modified), aber das ist nicht das, was ich versuche zu erreichen.

Arbeitet mit Klassen

Bei Klassen funktioniert das gut:

%Vor%

Funktioniert nicht mit Schnittstellen

Bei Interfaces gibt der Compiler jedoch diese Warnung aus, wenn er die Eigenschaft in ClassSampleDoesNotWork deklariert:

%Vor%

Code:

%Vor%

Modifizierte Version funktioniert, aber das ist nicht wirklich was ich will

Wenn ich die Klasse modifiziere, um TEnumerableOfItem anstelle von TItem zu haben, funktioniert es:

%Vor%     
lightbricko 08.07.2013, 14:05
quelle

1 Antwort

5

Versuchen Sie, class constraint zu TItem hinzuzufügen:

%Vor%

Das funktioniert, weil Varianz nur für Referenztypen funktioniert (oder es gibt eine Identitätskonvertierung). Es ist nicht bekannt, dass TItem der Referenztyp ist, es sei denn, Sie fügen : class hinzu. Lesen Sie diesen Artikel für weitere Informationen. Hier ist ein Beispielcode, um dieses Verhalten zu demonstrieren:

%Vor%     
Vyacheslav Volkov 08.07.2013, 14:25
quelle

Tags und Links