Variant数组和动态数组之间有哪些区别?

时间:2016-07-01 15:15:42

标签: arrays delphi variant

使用Variant数组(如显示here)而不是常见的动态数组有什么区别?

1 个答案:

答案 0 :(得分:10)

Variants 是一种从编译器和运行时获得特殊处理的类型。在引擎盖下,它们是TVarRec类型的记录。它们可以在内部包含许多不同类型的类型,甚至可以用于在这些类型中的某些类型之间进行转换。但它们也可以包含值数组,甚至是其他变量的数组,单维和多维。那是Variant数组。 System.Variants单元包含定义和处理此类数组的函数。

更多信息on the Delphi Basics site

变种通常由 Windows COM 使用。请注意,它们可能非常慢,尤其是具有多个维度的Variant数组。他们可以包含的类型数量有限。

动态数组是内置类型。它们是普通数组,可以包含任何可想到的类型的元素,内置或用户定义。与普通(静态)数组的不同之处在于它们可以动态实例化,放大或缩小(例如使用SetLength),并且它们的变量是指向真实数组(在堆上分配)的指针。它们的生命周期由运行时管理。

动态数组是正确的内置类型,比Variants(和Variant数组)更通用。

Delphi Basics也有more info

更新

正如Remy Lebeau评论的那样,我应该提到Variant数组(以及OleVariant数组)基于COM的SAFEARRAY结构,因此只能是使用COM / OLE兼容的数据类型创建,即使Delphi的Variant可以保存非COM / OLE类型。