@Stahli: Da das Add von der generischen Liste ist, wird der Wert, der dort reingegeben wird, vom Typ T sein
Lösung:
Delphi-Quellcode:
function TGenericInterfaceList<T>.Get(Index: Integer): T;
begin
Result := T(FInterfaces[Index]);
end;
Warum kein cast oder Supports? Na, weil das Interface, was du beim Add hineingibst, schon vom Typ T ist, was aber auch ein IInterface ist (Typeconstraint). Deshalb stehen in FInterfaces immer interface Referenzen vom Typ T. Und deshalb kannst du es einfach wieder umcasten.
@XE2 Benutzer:
Hier wurden (mit Update 3 glaube ich) die Typecasts bei Generics etwas restriktiver. Deshalb muss man dort bei manchen solcher Typecasts einen kleinen Umweg über PPointer gehen. Das aber, meine ich mich zu erinnern, nur wenn man von T auf einen konkreten Typ möchte, welcher zwar durch die Programmlogik korrekt ist aber nicht über einen Typeconstraint gegeben ist.
Zitat:
Ziel des ganzen soll es sein TInterfaceList durch eine generische, einfachere Liste zu ersetzen.
Ginge das nicht auch mit Generics.Collections.TList<IMeinInterface> ?
Generics.Collections Klassen haben keine Interfaces.