Es ergeben sich dann allerdings ganz lustige Effekte. Der unbedarfte Programmierer könnte annehmen, die Assertions würden anschlagen:
Delphi-Quellcode:
type
IMyInterface<T> = interface
['{FF9D4362-FBD2-4333-B6B0-09B1A026E8A1}']
function Blub(): T;
end;
TMyClass<T> = class(TInterfacedObject, IMyInterface<T>)
private
FValue: T;
public
constructor Create(AValue: T);
function Blub(): T;
end;
function TMyClass<T>.Blub: T;
begin
result := FValue;
end;
var
int: IMyInterface<Integer>;
dbl: IMyInterface<Double>;
begin
int := TMyClass<Integer>.Create(1);
dbl := TMyClass<Double>.Create(0.1);
Assert(Supports(int, IMyInterface<Double>));
Assert(Supports(dbl, IMyInterface<Integer>));
end;