值类型和引用类型

Visual Basic 中有两种类型的类型:引用类型和值类型。 引用类型的变量存储对其数据的引用(对象),而值类型的变量直接包含其数据。 对于引用类型,两种变量可引用同一对象;因此,对一个变量执行的操作会影响另一个变量所引用的对象。 对于值类型,每个变量都有自己的数据副本,对一个变量的操作不会影响另一个变量(除非在 参数上的 ByRef 修饰符的情况下)。

值类型

如果数据类型在自己的内存分配中保存数据,则数据类型是 一种值类型 。 值类型包括以下内容:

  • 所有数值数据类型

  • BooleanCharDate

  • 所有结构(即使其成员是引用类型)

  • 枚举,因为它们的基础类型始终是SByteShortIntegerLongByteUShortUIntegerULong

每个结构都是一个值类型,即使它包含引用类型成员。 因此,值类型(例如 CharInteger)由.NET Framework 结构实现。

可以使用保留关键字声明值类型, Decimal例如。 还可以使用 New 关键字初始化值类型。 如果类型具有采用参数的构造函数,则此方法特别有用。 例如,构造函数 Decimal(Int32, Int32, Int32, Boolean, Byte) 从提供的部件生成一个新的 Decimal 值。

引用类型

引用类型存储对其数据的引用。 引用类型包括以下内容:

  • String

  • 所有数组,即使其元素是值类型

  • 类类型,例如 Form

  • 代表

类是 引用类型。 请注意,每个数组都是引用类型,即使其成员是值类型。

由于每个引用类型都表示基础 .NET Framework 类,因此在初始化它时必须使用 New Operator 关键字。 以下语句初始化数组。

Dim totals() As Single = New Single(8) {}  

不是类型的元素

以下编程元素不符合类型,因为不能将其中任何元素指定为声明元素的数据类型:

  • 命名空间

  • 模块

  • 事件

  • 属性和过程

  • 变量、常量和字段

使用 Object 数据类型

可以将引用类型或值类型分配给数据类型的 Object 变量。 Object 变量始终保存对数据的引用,而不是数据本身。 但是,如果将值类型分配给 Object 变量,则其行为就像它保存自己的数据一样。 有关详细信息,请参阅 对象数据类型

可以通过将Object变量传递给命名空间类IsReference中的Information方法来确定变量是Microsoft.VisualBasic作为引用类型还是值类型。 Information.IsReference 如果 True 变量的内容 Object 表示引用类型,则返回。

另请参阅