zoukankan      html  css  js  c++  java
  • Delphi Variant 通用类型[2] 常用函数/过程

    Delphi Variant 通用类型[2] 常用函数/过程

    Variant:

    • 拥有多数据类型;
    • 可通过VarType函数 获取存储的数据类型;
    • 可给相同的Variant分配不同的数据类型,只要Variant包含数字值就可以执行算法;
    • variant数组是variant型的数组,不必包含同类型的数据;

    引用单元:Variants

    1、常用函数/过程:

    • VarArrayOf //创建一维变体数组,可以创建全异的数值数组;  function VarArrayOf(const Values: array of Variant): Variant;VarArrayCreate 函数:
      • VarArrayOf //生成一个一维Variant数据的方法,它接受一个Variant类型的Open Array,用这个数据生成一个一维的Variant Array of Variant(类型为Variant)。由于Delphi对Open Array类型参数的支持,使你可以用一行语句生成一个数组。不过它有两个缺陷: 只能生成一维数组;只能生成元素类型是Variant的数组。使用Variant数组, 与使用标准Delphi数组类似;
      • 例如: MyArray := VarArrayOf([‘李维‘, 30, ‘60‘, 60.369, ‘China‘]);
      • function VarArrayCreate(const Bounds: array of Integer; VarType: TVarType): Variant;
      • Bounds: 告诉数组的上下界;
      • VarType: 决定了数组的中存储什么类型的数据。
      • 其它的数组(如二维、或者其他类型等)只能用VarArrayCreate去创建,并用循环给元素赋值。
      • 例如:创建数组的数组, 可以模仿任何类型的数据结构类型:
      • VarArrayX := VarArrayCreate([1,10], varVariant);
      • 数组的单个元素可以装载一个数组: VarArrayX[1] := VarArrayCreate([1,5], varVariant);
    • VarArrayHighBound  //返回变体数组上限   function VarArrayHighBound(const A: Variant; Dim: Integer): Integer;    //从1开始(1:列;2:行;3:3维的最后一维)。
    • VarArrayLowBound  //返回变体数组下限,
    • VarArrayRedim  //修改variant数组的最高限。  procedure VarArrayRedim(A: Variant; HighBound: Integer);
    • VarArrayDimCount  //返回variant数组维数   function VarArrayDimCount(const A: Variant): Integer;
    • VarArrayLock、VarArrayUnLock //避免运行时刻检查。一般用于初始化一个大数组。
      • function VarArrayLock(const A: Variant): Pointer;
      • procedure VarArrayUnlock(var A: Variant);
      • 在对Variant数组的每一个元素进行赋值时,都要通过运行时逻辑来检查并判断数据类型的兼容性、每个元素的位置等等。为了避免运行时检 查,要用VarArrayLock()函数和VarArrayUnlock()过程。
      • VarArrayLock()函数在内存中锁定数组,使数组不再移动 和改变大小,并能返回一个指向数组数据的指针。
      • VarArrayUnlock()过程用来对VarArrayLock()函数锁定的数组进行解锁,使数 组能重新移动或改变大小。在锁定数组后,能用更有效的方法对数组进行初始化。
    • VarArrayRef //获得variant指向的数据  function VarArrayRef(const A: Variant): Variant;
    • VarIsArray  //布尔检查函数,判断是否是一个 Variant数组,是则返回True.   //function VarIsArray(const A: Variant): Boolean; overload;   //  function VarIsArray(const A: Variant; AResolveByRef: Boolean): Boolean; overload;
    • VarClear  //清除Variant变量并将VType域的值设为varEmpty.
    • VarCopy  //将Source复制到Dest。
    • VarCast  //将一个Variant转换成指定的类型并存储在另一个Variant变量中。
    • VarType   //返回指定Variant的函数varXXX类型代码。
    • VarAsType //跟VarCast()的功能一样。
    • VarIsEmpty()  //如果一个Variant变量的类型代码是varEmpty则返回True。
    • VarIsNull()  //判断Variant变量是否包含null值。
    • VarToStr  //将一个Variant变量转换成字符串表达式(如果Variant为varEmpty或varNUll则为空字符串)。
    • VarFromDateTime  //返回一个Variant变量,它存放着指定的TDateTime类型的值。
    • VarToDateTime  //返回在Variant中的TDateTime类型的值。

     

    2、Delphi 示例:

    var
      Arr: array of Integer;
    begin
      Arr := varArrayCreate([0,3],varInteger);
      ShowMessage(IntToStr(Length(Arr)));  //4
    
      Arr := VarArrayOf([1,2,3,4]);
    
      ShowMessage(IntToStr(Arr[0]));  //1
    end;
    

     

    var
      a, b: Variant;
      I, J, K, M: Integer;
    begin
      a := VarArrayOf([1234, 'abc', Null]);   //a是个一维Variant数组,元素类型是Variant,元素个数是3,上界是2,下界是0。
      b := VarArrayCreate[0, 3, 1, 16], varOleStr);    ////b是一个16行4列的二维数组
      I := VarArrayHighBound(b, 1); // I是b的最大列号:3;
      J := VarArrayLowBound(b, 1);  // J是b的最小列号:0;
      K := VarArrayHighBound(b, 2); // K是b的最大行号:16;
      M := VarArrayLowBound(b, 2);  // M是b的最小行号:1。
    end;

     

    创建时间:2020.12.22  更新时间:

  • 相关阅读:
    社区专家谈 12306
    一致性Hash算法(分布式算法)
    ASP.NET二级域名站点共享Session状态
    树莓派2 安装 win10Iot 和 Ubuntu mate
    Maven运行时异常java.lang.UnsupportedClassVersionError的解决方案
    Ubuntu安装steam游戏平台的解决方案
    Spring配置JNDI的解决方案
    Intellij Idea无法从Controller跳转到视图页面的解决方案
    电话激活windows server 2012的解决方案
    如何下载Red Hat Enterprise Linux系统
  • 原文地址:https://www.cnblogs.com/guorongtao/p/14172847.html
Copyright © 2011-2022 走看看