不定类型

科技工作者之家 2020-11-17

不定类型是编程语言中所拥有的一种数据类型,常用于Visual Basic及C++中。在Visual Basic(及Visual Basic for Applications)中,不定类型是一种标签联合,用以表达任何一种数据类型(例如整数、双精度及单精度浮点数、对象等等),除了固定长度字符串或结构体。任何在Visual Basic中并未明确指定数据类型的变量,也会被当成不定类型来进行处理。

简介在计算机程序中,不明确地宣告变量类型是一个不太好的习惯,但当一个数据的类型只有在运行时期才能被确定时,它就显得相当的有用。实际上一部分动态类型的编程语言里,通常就只有不定类型这一种数据类型,即程序中没有明确定义变量的数据类型。

在Visual Basic.NET里,因为面向对象概念被引入,所以不定类型被.NET的Object类型所取代。Object类型和不定类型在概念上很相似,但却大大不同,而且无法互相转换。当Visual Basic.NET需要与Visual Basic的COM对象交互,通常需要先透过.NET的一些程序进行转换。

数据类型数据的抽象结构的说明形式。同一类型的数据,其各成分都具有相同的特性,可进行相同的操作。程序中出现的每个变量、常量或表达式的值,都属于确定的数据类型。变量的所有可能取值,以及在这些值上可允许的操作,都由数据的类型在程序中显式地或隐式地规定。数据类型可分为简单类型和复合类型两种:

简单类型,具有相同的数学特性和相同的计算机内部表示法,其数据的逻辑结构特点是只包含一个初等项的结点。通常有五种基本的简单类型:整数类型、实数类型、布尔类型、字符类型和指针类型。

复合类型,或称组合类型或结构类型。是由简单类型用某种方式组合而成的。根据不同的构造方法,可构成以下不同的数据结构类型:

数组类型。所有成分都属于同一类型。

记录类型。各成分不一定属于同一类型。

集合类型。它定义的值集合是其基类型的幂集,也就是基类型的值域的所有子集的集合。

文件类型。属于同一类型的各成分的一个序列,这个序列规定各成分的自然次序。

递归数据结构。在数据结构的定义式中出现名本身的数据结构1。

示例在Visual Basic,一个变量可以透过明确或含糊的宣告,令它成为一个不定类型的变量:

Dim ADim A as Variant如果在 Delphi想要这样做,则可使用如下的代码:

var A: variant;格式

在Visual Basic中,一个不定类型需要使用16个字节的空间去存储数据;

|| ||

类型

以下为在Visual Basic中不定型可能会存储的数据类型:

|| ||

注:

Empty代表一个尚未被初始化的不定类型

NULL代表数据库里没有数据的字段。此NULL不应与未初始化的变量,或是C语言里的NULL指针混淆。

Missing一般用在调用函数时。当一个函数的参数被省略,那么就会传入这个数值代替。

Nothing代表此对象的参址被设为NULL。

对象参址代表此变量是一个指向一个对象的界面的指针,也就是说它会指向该对象的函数指针表。

应用集合

在OLE里,一个集合可以存放各种不同数据类型的数据。因为在编译时期里面所存储的数据一般难以预测,所以集合里用来加入数据或读取数据的函数一般都是使用不定类型。

可选参数

在Visual Basic,一个函数的参数可以使用Optional关键字,把它设成一个可选的参数。当使用这个函数时可选参数没有被传入,那么Visual Basic就会用一个叫Missing的特别数值取代被省略的参数。

Function GetText(Optional ByVal Index) As String If IsMissing(Index) Then GetText = Item(CurrentItem) Else GetText = Item(Index) End IfEnd Function有关术语标签联合

标签联合(tagged union)也称可辨识联合(discriminated union)或者变体类型(variant type),指的是这样的一种数据结构,它能够存储一组不同但是固定的类型中某个类型的对象,具体是哪个类型由标签字段决定。这种数据结构在解释器、数据库和数据通信中非常有用。需要注意的是,可辨识联合英文原词在数学中又指不相交并集(disjoint union)。

IUnknown

在程序设计中,IUnknown接口是组件对象模型(COM)中的基础接口。COM规格中规定COM对象至少要实现此一接口,而且其他所有的COM接口都需要派生自IUnknown接口。IUnknown提供所有COM对象都支持的两种基本特性:利用引用计数来进行对象生命周期管理,以及访问许多事先定义的接口。

IUnknown接口会包括一个指向虚拟方法表的指针,虚拟方法表是一个有许多函数指针的列表,函数指针会指向许多实现IUnknown接口所宣告的函数,以和接口中宣告顺序相同的方式排列。而进程内调用产生的开销大致和C++中调用虚拟方法的开销相近。

本词条内容贡献者为:

王沛 - 副教授、副研究员 - 中国科学院工程热物理研究所

科技工作者之家

科技工作者之家APP是专注科技人才,知识分享与人才交流的服务平台。