Типы значений и ссылочные типы

В Visual Basic есть два типа типов: ссылочные типы и типы значений. В переменных ссылочных типов хранятся ссылки на их данные (объекты), а переменные типа значений содержат свои данные непосредственно. Две переменные ссылочного типа могут ссылаться на один и тот же объект, поэтому операции над одной переменной могут затрагивать объект, на который ссылается другая переменная. При использовании типов значений каждая переменная имеет собственную копию данных, и для операций с одной переменной нельзя влиять на другую (за исключением случаев модификатора ByRef для параметров).

Типы значений

Тип данных — это тип значения, если он содержит данные в пределах собственного выделения памяти. Типы значений включают следующие:

  • Все числовые типы данных

  • Boolean, Char и Date

  • Все структуры, даже если их члены являются ссылочными типами

  • Перечисления, так как их базовый тип всегда SByte, ShortInteger, Long, , Byte, UShortUIntegerилиULong

Каждая структура — это тип значения, даже если он содержит элементы ссылочного типа. По этой причине типы значений, такие как Char и Integer реализуются платформа .NET Framework структурами.

Можно объявить тип значения с помощью зарезервированного ключевое слово, напримерDecimal. Можно также использовать New ключевое слово для инициализации типа значения. Это особенно полезно, если тип имеет конструктор, который принимает параметры. Примером этого является Decimal(Int32, Int32, Int32, Boolean, Byte) конструктор, который создает новое Decimal значение из предоставленных частей.

Ссылочные типы

Ссылочный тип сохраняет ссылку на свои данные. Ссылочные типы включают следующие:

  • String

  • Все массивы, даже если их элементы являются типами значений

  • Типы классов, такие как Form

  • Делегаты

Класс является ссылочным типом. Обратите внимание, что каждый массив является ссылочным типом, даже если его члены являются типами значений.

Так как каждый ссылочный тип представляет базовый класс платформа .NET Framework, при инициализации необходимо использовать новый оператор ключевое слово. Следующая инструкция инициализирует массив.

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

Элементы, которые не являются типами

Следующие элементы программирования не соответствуют типам, так как нельзя указать любой из них в качестве типа данных для объявленного элемента:

  • Пространства имен

  • Модули

  • События

  • Свойства и процедуры

  • Переменные, константы и поля

Работа с типом данных объекта

Ссылочный тип или тип значения можно назначить переменной Object типа данных. Переменная Object всегда содержит ссылку на данные, никогда не сами данные. Однако при назначении типа значения переменной Object он ведет себя так, как если бы он содержит собственные данные. Дополнительные сведения см. в разделе "Тип данных объекта".

Можно узнать, действует ли Object переменная в качестве ссылочного типа или типа значения, передав его IsReference методу в Information классе Microsoft.VisualBasic пространства имен. Information.IsReference возвращает значение True , если содержимое переменной Object представляет ссылочный тип.

См. также