Visual Basic 中有两种类型的类型:引用类型和值类型。 引用类型的变量存储对其数据的引用(对象),而值类型的变量直接包含其数据。 对于引用类型,两种变量可引用同一对象;因此,对一个变量执行的操作会影响另一个变量所引用的对象。 对于值类型,每个变量都有自己的数据副本,对一个变量的操作不会影响另一个变量(除非在 参数上的 ByRef 修饰符的情况下)。
值类型
如果数据类型在自己的内存分配中保存数据,则数据类型是 一种值类型 。 值类型包括以下内容:
所有数值数据类型
Boolean
、Char
和Date
所有结构(即使其成员是引用类型)
枚举,因为它们的基础类型始终是
SByte
、Short
、Integer
、Long
、Byte
、UShort
、UInteger
或ULong
每个结构都是一个值类型,即使它包含引用类型成员。 因此,值类型(例如 Char
和 Integer
)由.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
表示引用类型,则返回。