Delphi中关于 array of const 变体开放数组参数

来源:互联网 发布:阿里云邮箱电脑版下载 编辑:程序博客网 时间:2024/05/07 01:19

变体开放数组参数   
      
    
    变体开发数组参数允许向单个过程或函数传递不同类型表达式的数组。要定义含有变体开放数组参数的例程,需要指定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     +     CurrToStr(VCurrency^);   
    
                    vtVariant:           Result     :=     Result     +     string(VVariant^);   
    
                    vtInt64:               Result     :=     Result     +     IntToStr(VInt64^);   
    
            end;   
    
    end;   
    
    可以用一个开放数组构造器(见开放数组构造器)来调用该函数。例如:   
    
    MakeStr(['test',     100,     '     ',     True,     3.14159,     TForm])   
    
    上面的调用将返回串    "test100     T3.14159TForm”。

原创粉丝点击