我基本上有这个对象结构:
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
etc时执行。
但它不会编译:E2706 This form of method call only allowed for class methods.
我确实理解原因(编译器消息的文本),但我该如何解决这个问题,以便在 lWebAct=ttlogin 等时执行 TReqLogin.FillWithTemplateData而无需处理代码中的 TReqLogin、TReqSignIn 类型列表(再次)?