私は基本的にこのオブジェクト構造を持っています:
TJSONStructure = class(TObject);
TReqBase = class(TJSONStructure)
private
token: Int64;
public
procedure FillWithTemplateData; virtual;
end;
TReqLogin = class(TReqBase)
private
username,
password: String;
module : Integer;
public
procedure FillWithTemplateData; override;
end;
procedure TReqBase.FillWithTemplateData;
begin
token := ...;
end;
procedure TReqLogin.FillWithTemplateData;
begin
inherited;
username := ...;
password := ...;
module := ...;
end;
type
TWebAct = (ttlogin,
ttsignin);
TReqClass = class of TReqBase;
const
cWebActStructures: Array[TWebAct] of
record
RequestClass : TReqClass;
end
= (
{ ttlogin } (RequestClass: TReqLogin;),
{ ttsignin } (RequestClass: TReqSignIn;) // Not in definitions above
);
今私がやります:
var
lWebAct : TWebAct;
lRequestClass : TReqClass;
begin
for lWebAct := Low(TWebAct) to High(TWebAct) do
begin
lRequestClass := cWebActStructures[lWebAct].RequestClass;
そして電話したい
lRequestClass.FillWithTemplateData;
TReqLogin.FillWithTemplateData
lWebAct =ttlogin
などのときに実行するため
ですが、コンパイルされません:E2706 This form of method call only allowed for class methods.
理由 (コンパイラ メッセージのテキスト) は理解していますが、コード内の TReqLogin、TReqSignIn タイプのリストを処理する必要なく (再び) lWebAct=ttlogin などのときに TReqLogin.FillWithTemplateData が実行されるようにするにはどうすればよいでしょうか?