다음의 고려 방법의 종류를 해결하지 :제네릭이 제대로
{$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.
이것은 이제 우리는 목록에서 프로 시저를 할당한다고 가정
foo
bar
의 예상 출력을 생성합니다. 위와 같이 열거가 작동합니다.
aProc := ProcList.Items[0];
aProc;
을하지만 이것은 컴파일러 오류가 발생합니다 : :이 또한 작동 그래서
function TList<T>.First: T;
begin
Result := Items[0];
end;
이후 이중 홀수
aProc := ProcList.First;
// E2010 Incompatible types:
//'procedure, untyped pointer or untyped parameter' and 'TObjProc'
을 ... 무슨 일이야?
이것은 최신 버전의 Delphi에도 영향을 줍니까? 이것이 제대로 작동해야한다는 합리적인 기대가 있다면 QC에 유혹을 받는다.
C#, C, C++, Python 및 기타 모든 언어에서. VB는 따로하고. 크기가 2 세트이고 다른 멤버가 VB 일 때 항상 나빠질 수 있습니다! –
그리고, AFAIK, Swift, 그럼 3 세트가됩니다. –