Generics löst Methodentypen nicht korrekt auf
Folgendes berücksichtigen
{$APPTYPE CONSOLE}
uses
Generics.Collections;
type
TObjProc = procedure of object;
TFoo = class
public procedure DoFoo;
public procedure DoBar;
end;
procedure TFoo.DoFoo;
begin
WriteLn('foo');
end;
procedure TFoo.DoBar;
begin
WriteLn('bar');
end;
var
ProcList : TList<TObjProc>;
Foo : TFoo;
aProc : TObjProc;
begin
Foo := TFoo.Create;
ProcList := TList<TObjProc>.Create;
ProcList.Add(Foo.DoFoo);
ProcList.Add(Foo.DoBar);
for aProc in ProcList do aProc;
ReadLn;
end.
Dies erzeugt die erwartete Ausgabe von
foo
bar
Angenommen, wir möchten eine Prozedur aus der Liste zuweisen. Aufzählen funktioniert wie oben. Das funktioniert auch:
aProc := ProcList.Items[0];
aProc;
Aber dies löst einen Compilerfehler aus :
aProc := ProcList.First;
// E2010 Incompatible types:
//'procedure, untyped pointer or untyped parameter' and 'TObjProc'
Was ist doppelt ungerade seit
function TList<T>.First: T;
begin
Result := Items[0];
end;
So was ist los
Betrifft dies auch neuere Versionen von Delphi? Ich bin versucht, dies zu überprüfen, wenn eine vernünftige Erwartung besteht, dass dies funktionieren sollte (was meiner Meinung nach der Fall ist).