作为通用数据类型的对象

更新:2007 年 11 月

Object 数据类型是 .NET Framework 和 Visual Basic 中的根类型。这意味着所有其他数据类型和对象类型都是直接或最终由它派生的。同时也意味着其他任何数据类型(不论是基本数据类型还是复合数据类型)都可以转换为 Object。

松散类型

可以将 Object 用作通用数据类型。这称为“松散类型”。下面的示例阐释了这种灵活性。

Dim v As Object
v = "17"
' v contains the 2-character String value "17".
v = v - 15
' v now contains the Integer value 2.
v = "H" & v
' v now contains the 2-character String value "H2".

虽然在对 Object 变量执行此类操作时不必过多地考虑它们所包含的数据类型,但必须避免以下陷阱:

  • 如果对 Object 执行算术运算或函数,它必须存储数值数据,否则将发生运行时错误。

  • 如果要串联字符串,请使用 & 运算符而不是 + 运算符。当 + 运算符添加操作数和连接操作数时,需要遵守一些复杂的规则。+ 运算符在某些情况下还必须执行类型检查和转换,这会降低性能。

更改对象变量的数据类型

虽然 Object 变量可以接受任何类型的数据,但无法将此变量本身更改为其他数据类型。不过,可以将 Object 变量重新转换为 Object 变量数组。下面的示例阐释了 ReDim 语句 (Visual Basic) 的有效用法和无效用法。

' The following statement declares a single Object.
Dim someObj As Object
' The following reallocation is valid only for Object.
ReDim someObj(8)
' The following statement attempts an INVALID change of data type.
ReDim someObj(8) As Double

第一条 ReDim 语句将 someObj 更改为 Object 类型的数组。这只对 Object 数据类型有效。第二条 ReDim 语句是无效的,因为它涉及其他数据类型。您可以通过使用单独的数组实现所需的效果。下面的示例阐释这一点。

' First allocate a separate array.
Dim someArray(8) As Double
' Then assign the new array to the Object variable.
someObj = someArray

可替代结构的对象

因为 Object 数据类型可以存储许多不同类型的数据,在预期可能要使用结构的许多情况中可使用 Object 数组。Object 数组比结构稍微灵活些,因为可以随时更改存储在每个元素中的数据类型,并且可以使数组成为动态的,以便可根据需要更改其大小。但是,Object 数组比等效的结构使用更多的内存,且性能更低。

请参见

概念

Visual Basic 中的无类型编程

隐式和显式声明

Visual Basic 中的类型检查

有效使用数据类型

对象变量声明

对象变量赋值

对象变量值

参考

数据类型摘要 (Visual Basic)

类型转换函数

其他资源

Visual Basic 中的类型转换