将多个对象作为一个参数传递

Jus*_*tMe 2 delphi oop delphi-xe2

我想以最小的努力将多个对象作为一个参数传递.

我有一些类型

TOpenMode = [omNew, omEdit, omBrowse] 
Run Code Online (Sandbox Code Playgroud)

和一个程序

procedure OpenForm(Form: TForm; ANewWindow: boolean = false; 
                   Datasets: TUniDataSet; TableOpenMode: TOpenMode);
Run Code Online (Sandbox Code Playgroud)

我想传递多个数据集.没有数组或创建新对象,我可以这样做吗?如何让它们成对传递[UniTable1, TOpenMode], [UniTable2, TOpenMode]

Dav*_*nan 5

在单个复合类型中组合多个对象的最简单方法是记录:

type
  TDataSetAndOpenMode = record
    DataSet: TUniDataSet;
    OpenMode: TOpenMode;
  end;
Run Code Online (Sandbox Code Playgroud)

为方便起见,提供了初始化其中一条记录的功能:

function DataSetAndOpenMode(DataSet: TUniDataSet; 
    OpenMode: TOpenMode): TDataSetAndOpenMode;
begin
  Result.DataSet := DataSet;
  Result.OpenMode := OpenMode;
end;
Run Code Online (Sandbox Code Playgroud)

然后你的OpenForm函数可以接收这些记录的开放数组:

procedure OpenForm(Form: TForm; const Datasets: array of TDataSetAndOpenMode;
    NewWindow: Boolean=False);
Run Code Online (Sandbox Code Playgroud)

请注意,我已将NewWindow参数放在最后.由于它具有默认值,因此该默认值仅在它出现在列表末尾时才有用.

现在,要调用该函数,您可以编写如下代码:

OpenForm(Form, [DataSetAndOpenMode(DataSet1, OpenMode1), 
    DataSetAndOpenMode(DataSet2, OpenMode2)]);
Run Code Online (Sandbox Code Playgroud)

  • 您使用单独的函数而不是记录构造函数的任何原因?只是好奇. (2认同)