Delphi发送了TObjectList-like-var参数
我有课Delphi发送了TObjectList-like-var参数,delphi,parameters,compiler-errors,tobjectlist,Delphi,Parameters,Compiler Errors,Tobjectlist,我有课 TFolder = class NODE_INDEX: Integer; FIRST_INDEX : Integer; CODE_NAME: AnsiString; NAME: AnsiString; constructor Create(NewNODE_INDEX, NewFIRST_INDEX: Integer; NewCODE_NAME, NewNAME: AnsiString); destructor Destroy; overr
TFolder = class
NODE_INDEX: Integer;
FIRST_INDEX : Integer;
CODE_NAME: AnsiString;
NAME: AnsiString;
constructor Create(NewNODE_INDEX, NewFIRST_INDEX: Integer; NewCODE_NAME, NewNAME: AnsiString);
destructor Destroy; override;
end;
而且我有打字
type
TFolderList = class (TObjectList<TFolder>)
end;
当我尝试发送TObject list-like参数时
procedure TForm1.FormCreate(Sender: TObject);
begin
olLOCALFolders := TObjectList<TFolder>.Create();
Account.LoadFoldersFromDisk(olLOCALFolders);
end;
我得到的实际和形式var参数的错误类型必须相同。我做错了什么?只需将TObjectList替换为您之前定义的TFolderList即可:
procedure TForm1.FormCreate(Sender: TObject);
begin
olLOCALFolders := TFolderList.Create();
Account.LoadFoldersFromDisk(olLOCALFolders);
end;
但是,您可能不需要在此处使用var参数-方法名称LoadFoldersFromDisk表明该方法将使用项填充作为参数发送的列表,并且为此,您可以按值发送列表。只有当该方法会提醒列表对象的内存位置而不是其内容时,即LoadFoldersFromDisk可以释放原始列表并创建新列表时,才需要使用var参数。只需将TObjectList替换为之前定义的TFolderList即可:
procedure TForm1.FormCreate(Sender: TObject);
begin
olLOCALFolders := TFolderList.Create();
Account.LoadFoldersFromDisk(olLOCALFolders);
end;
但是,您可能不需要在此处使用var参数-方法名称LoadFoldersFromDisk表明该方法将使用项填充作为参数发送的列表,并且为此,您可以按值发送列表。只有当该方法会提醒列表对象的内存位置而不是其内容时,即LoadFoldersFromDisk可以释放原始列表并创建新列表时,才需要使用var参数。错误是因为您的子类是新类型,不同于TObjectList,因此出现错误 导出这样的子类可能是错误的:
type
TFolderList = class (TObjectList<TFolder>)
end;
这样做会迫使各方使用该类型,并剥夺您利用泛型类型兼容性的机会。如果您有一个在TObjectList上操作的泛型方法,那么您的新类型将不兼容
而是声明一个别名:
type
TFolderList = TObjectList<TFolder>;
别名的要点是,它是同一类型的不同名称,而不是代码声明的新类型
或者只是到处使用TObjectList而不声明TFolderList
更广泛地说,您的TFolder类型似乎更适合作为值类型。我认为作为一张唱片可能比作为一门课更好
此外,var参数似乎不正确。如果函数要修改引用,您将使用var参数。但它将填充调用者传入的列表。您应该从参数列表中删除var 错误是因为您的子类是一个新类型,不同于TObjectList,因此出现了错误 导出这样的子类可能是错误的:
type
TFolderList = class (TObjectList<TFolder>)
end;
这样做会迫使各方使用该类型,并剥夺您利用泛型类型兼容性的机会。如果您有一个在TObjectList上操作的泛型方法,那么您的新类型将不兼容
而是声明一个别名:
type
TFolderList = TObjectList<TFolder>;
别名的要点是,它是同一类型的不同名称,而不是代码声明的新类型
或者只是到处使用TObjectList而不声明TFolderList
更广泛地说,您的TFolder类型似乎更适合作为值类型。我认为作为一张唱片可能比作为一门课更好
此外,var参数似乎不正确。如果函数要修改引用,您将使用var参数。但它将填充调用者传入的列表。您应该从参数列表中删除var