Поделиться через


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

В 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 переменная в качестве ссылочного типа или типа значения, передав её IsReference методу в Information классе Microsoft.VisualBasic пространства имен. Information.IsReference возвращает значение True , если содержимое переменной Object представляет ссылочный тип.

См. также