Delphi中关于 array of const 变体开放数组参数 .
变体开发数组参数允许向单个过程或函数传递不同类型表达式的数组。要定义含有变体开放数组参数的例程,需要指定array of const作为参数类型。如,
procedure DoSomething(A: array of const);
这里声明了一个叫做DoSomething的过程,该过程可以操作不同种类的数组。
array of const结构等价于array of
TVarRec。TVarRec,在单元System中声明,用于表示一个记录,记录中有一个可以保存多种值(整数、布尔、字符、实数、串、指针、类、类
引用、接口、变体等)的变体部分。TVarRec中的VType字段表示数组中每个元素的类型。一些类型作为指针传递而不传递值;特别是长串,作为指针传
递并且必需转换为string类型。
下面的例子在函数中使用了变体开放数组参数,该函数对接受的每个元素创建一个串表示法,最后连接成一个串。该函数中调用的串处理例程都定义在SysUtils单元中。
function MakeStr(const Args: array of const): string;
const
BoolChars: array[boolean] of char = ('F', 'T');
var
i: integer;
begin
result := '';
for i := 0 to High(Args) do
with Args[i] do
case VType of
vtInteger: result := result + IntToStr(VInteger);
vtBoolean: result := result + BoolChars[VBoolean];
vtChar: result := result + VChar;
vtExtended: result := result + FloatToStr(VExtended^);
vtString: result := result + VString^;
vtPChar: result := result + VPChar;
vtObject: result := result + VObject.ClassName;
vtClass: result := result + VClass.ClassName;
vtAnsiString: result := result + String(VAnsiString);
vtCurrency: result := result + string(VVariant^);
vtInt64: result := result + IntToStr(VInt64^);
end;
end;
caption := MakeStr(['test', 100, '', true, 3.14159, TForm]);
caption 显示如下:
test100T3.14159TForm