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


Реализация типов данных (Visual Basic)

Каждый простой тип данных в Visual Basic поддерживается структурой или классом в пространстве имен System. Компилятор использует каждое ключевое слово типа данных как псевдоним для базовой структуры или класса. Например, объявление переменной посредством ключевого слова Byte равносильно объявлению ее полным именем структуры System.Byte.

В Visual Basic типы данных реализуются на основе их классификации. Типы данных Visual Basic могут классифицироваться в соответствии с тем, хранят ли переменные таких типов собственные данные или указатель на них. Если переменная хранит собственные данные, она имеет тип значения. Если переменная содержит указатель на данные в другом месте в памяти, она имеет ссылочный тип.

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

Тип данных является типом значений, если он содержит данные в пределах своей собственной области памяти. К типам значения относятся:

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

  • 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

  • Делегаты

Класс является ссылочным типом. По этой причине ссылочные типы, например Object и String, поддерживаются классами .NET Framework. Обратите внимание, что любой массив является ссылочным типом, даже если он содержит элементы типа значения.

Поскольку каждый ссылочный тип представляет собой соответствующий класс .NET Framework, для его инициализации необходимо использовать ключевое слово Оператор New (Visual Basic). Следующий оператор инициализирует массив:

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

Дополнительные типы доступны в .NET Framework

Общеязыковая среда выполнения (CLR) также поддерживает структуры и классы, не предусмотренные в Visual Basic. Например, структура System.Guid предоставляет глобально уникальный идентификатор (GUID), а класс System.TimeZone поддерживает часовой пояс. Эти типы можно использовать для объявления переменных и констант, и можно обращаться к методам, которые .NET Framework реализует для этих типов. Однако Visual Basic не поддерживает операции или тип преобразования, включающие типы, которые он не предоставляет.

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

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

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

  • Модули

  • События

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

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

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

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

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

Типы данных имеют элементы

Так как они поддерживаются структурами и классами .NET Framework, типы данных Visual Basic имеют члены. Эти члены включают в себя конструкторы, методы, свойства и поля. Пользователь может получить доступ к членам переменной (за исключением конструкторов) тем же способом, что и к методам и свойствам объекта.

В следующем примере используется Year, Month, и свойства Day, а также метод DaysInMonth структуры System.DateTime, чтобы определить, сколько дней осталось в текущем месяце.

Dim current As Date = Now
Dim daysRemaining As Integer
daysRemaining = Date.DaysInMonth(current.Year, current.Month) - current.Day

Обратите внимание, что необходимо предварять ссылку на член типа данных либо именем типа (Date), либо именем переменной, объявленной этим типом (current).

Примеры членов типа данных

В следующих прототипах кодов показаны некоторые полезные методы, свойства и поля, используемые в типах данных:

<Char>.IsDigit() ' Returns True if character is a numeric digit.

<Char>.IsLower() ' Returns True if character is a lowercase letter.

<Date>.IsLeapYear() ' Returns True if current year is a leap year.

<Date>.ToUniversalTime() ' Returns local date/time converted to UTC.

<Double>.IsInfinity() ' Returns True if contents represent infinity.

<Double>.IsNaN() ' Returns True if contents are not a number (0/0).

<Long>.MaxValue ' Constant representing largest positive Int64 value.

<Object>.GetType() ' Returns Type object representing type of <Object>.

<Object>.GetType().GetTypeCode() ' Returns type code of <Object>.

<String>.Chars(<index>) ' Character at position <index> of <String>.

<String>.Length ' Number of characters currently in <String>.

Все числовые типы, включая Byte и Char, предоставляют открытые поля MaxValue и MinValue, которые могут применяться при работе с этими типами.

Эквивалентность членов типа данных не подтверждена.

.NET Framework также предоставляет несколько методов для типов данных, которые могут быть эквивалентны функциям и ключевым словам Visual Basic. Однако Visual Basic не всегда использует методы.NET Framework для выполнения преобразований или других операций, и результаты не всегда идентичны.

Например, метод ToSingle выполняет тот же тип операций, что и ключевое слово CSng с выражением Decimal. Однако CSng не всегда использует ключевое слово System.dataType.ToSingle, и, следовательно, не всегда гарантируется совпадение результатов при граничных условиях.

Как правило, следует использовать элементы программирования Visual Basic, поскольку их легче использовать и они упрощают чтение кода. В некоторых случаях могут потребоваться дополнительные возможности, предоставляемые методом .NET Framework. Пример содержится в разделе "Оператор Mod не возвращает точный результат" в разделе Устранение неполадок, связанных с типами данных (Visual Basic).

Связанные разделы

Термин

Определение

Типы данных в Visual Basic

Содержит основные сведения о типах данных Visual Basic и способах их использования.

Сводка типов данных (Visual Basic)

Содержит список простых типов данных, предоставляемых средой Visual Basic.

Преобразование типов в Visual Basic

Описывает преобразование типов, то есть процесс приведения значения одного типа данных к другому типу.

Структуры (Visual Basic)

Содержит описание структур, которые являются пользовательскими типами, объявляемыми с ключевым словом Structure.

Эффективное использование типов данных (Visual Basic)

Описывает способы достигнуть более быстрого выполнения с помощью типов данных.

Тип данных Object

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

Ссылки

Boolean

Byte

Char

DateTime

Decimal

Double

Guid

TimeZone