Vielen Dank fuer Eure Antworten.
Das Problem ist, dass procedure of Object
nicht gleich procedure
ist. Letzteres ist ein einfacher Funktions-Zeiger, während Ersteres ein Methodenzeiger ist, welcher an eine Instanz gebunden ist. Habe grade leider kein Delphi zum Testen zu Hand, aber probier es mal mit RelodAdapterInstance.UpdateView1
, etc. Also mit einer konkreten Objektinstanz.
Mein Code hat es nicht eindeutig gezeigt; in meinem Fall waere das dann Self.UpdateView001. Das aendert leider nichts. Selbst die Deklaration als
Procedure; anstatt
Procedure of object; bringt die exakt gleichen Probleme (gleicher Compiler-Fehler).
Minimalbeispiel:
Delphi-Quellcode:
updateProcedures := TUpdateProcedures.Create(); // geht
updateProcedures := []; // geht
Ja, das geht beides. Aber dann
Delphi-Quellcode:
updateProcedures := TUpdateProcedures.Create(); // geht
updateProcedures := [UpdateView001, UpdateView002]; // geht nicht
'TUpdateProcedure' und 'procedure, untyped pointer or untyped parameter'
Vielleicht liegt mein Fehler in der Struktur, deshalb nochmal vollstaendiger:
Delphi-Quellcode:
type
TUpdateProcedure = Procedure of object;
TUpdateProcedures = TArray<TUpdateProcedure>;
TReloAdapter = class(TInterfacedObject, IModelUpdater)
private
UpdateViewProcedures: TUpdateProcedures;
procedure UpdateView001;
procedure UpdateView002;
public
constructor Create;
end;
var
ReloAdapter: TReloAdapter;
implementation
constructor TReloAdapter.Create;
begin
UpdateViewProcedures := TUpdateProcedures.Create(); // geht
UpdateViewProcedures := [UpdateView001, UpdateView002]; // geht nicht
end;