Object Data Type

保存引用对象的地址。 可以将任何引用类型(字符串、数组、类或接口)分配到 Object 变量。 Object 变量还可以引用任意值类型的数据,(数值、BooleanCharDate 、结构或枚举)。

注解

Object 数据类型可以指向任何数据类型的数据,包括应用程序识别的任何对象实例。 在编译时不知道变量可能指向的数据类型时,请使用 Object

Object 的默认值为 Nothing(空引用)。

数据类型

可以将任何数据类型的变量、常量或表达式分配给 Object 变量。 若要确定 Object 变量当前引用的数据类型,可以使用 System.Type 类的 GetTypeCode 方法。 下面的示例对此进行了演示。

Dim myObject As Object
' Suppose myObject has now had something assigned to it.
Dim datTyp As Integer
datTyp = Type.GetTypeCode(myObject.GetType())

Object 数据类型也是引用类型。 但是,当变量引用值类型的数据时,Visual Basic 将 Object 变量视为值类型。

存储

无论它引用哪种数据类型, Object 变量都不包含数据值本身,而是指向值的指针。 它在计算机内存中始终使用四个字节,但这不包括表示变量值的数据的存储。 由于使用指针查找数据的代码,保存值类型的 Object 变量比显式类型化变量略慢。

编程提示

  • 互操作注意事项。 如果你与不是为 .NET Framework 编写的组件(如自动化或 COM 对象)交互,请记住,其他环境中的指针类型与 Visual Basic Object 类型不兼容。

  • 性能。Object 类型声明的变量的灵活性足以包含对任何对象的引用。 但是,在此类变量上调用方法或属性时,始终会(在运行时)引发 后期绑定。 若要(在编译时)强制进行 早期绑定 并获得更好的性能,请使用特定类名声明变量,或将其转换为特定的数据类型。

    声明对象变量时,请尝试使用特定类类型,例如 OperatingSystem,而不是通用 Object 类型。 还应使用最具体的类,如 TextBox 而不是 Control,以便您可以访问其属性和方法。 通常可以使用 对象浏览器 中的 列表来查找可用的类名。

  • Widening。 所有数据类型和所有引用类型都扩大到 Object 数据类型。 这意味着,可以将任意类型转换为 Object,而不会遇到 System.OverflowException 错误。

    但是,如果在值类型和 Object 之间进行转换,Visual Basic 将执行称为 装箱取消装箱 的操作,这会使执行速度变慢。

  • 类型字符。 Object 没有文本类型字符或标识符类型字符。

  • Framework 类型。 .NET Framework 中的对应类型是 System.Object 类。

示例

下面的示例演示指向对象实例的 Object 变量。

Dim objDb As Object
Dim myCollection As New Collection()
' Suppose myCollection has now been populated.
objDb = myCollection.Item(1)

另请参阅