Явные и неявные преобразования (Visual Basic)

implicit conversion не требует специального синтаксиса в исходном коде. В следующем примере Visual Basic неявно преобразует значение k в значение одинарной точности с плавающей запятой перед его присвоением q.

Dim k As Integer
Dim q As Double
' Integer widens to Double, so you can do this with Option Strict On.
k = 432
q = k

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

В следующем расширении предыдущего примера ключевое слово CInt преобразует значение q обратно в целое перед его присвоением k.

' q had been assigned the value 432 from k.
q = Math.Sqrt(q)
k = CInt(q)
' k now has the value 21 (rounded square root of 432).

Ключевые слова преобразований

В следующей таблице показаны допустимые зарезервированные слова преобразования.

Ключевое слово преобразования типа

Преобразует выражение в тип данных

Типы данных, разрешенные для преобразуемого выражения

CBool

Тип данных Boolean (Visual Basic)

Любой числовой тип (включая Byte, SByte и типы перечисления) String, Object

CByte

Тип данных Byte (Visual Basic)

Любой числовой тип (включая SByte и перечисляемые типы), Boolean, String, Object

CChar

Тип данных Char (Visual Basic)

String, Object

CDate

Тип данных Date (Visual Basic)

String, Object

CDbl

Тип данных Double (Visual Basic)

Любой числовой тип (включая Byte, SByte и типы перечисления), Boolean, String, Object

CDec

Тип данных Decimal (Visual Basic)

Любой числовой тип (включая Byte, SByte и типы перечисления), Boolean, String, Object

CInt

Тип данных Integer (Visual Basic)

Любой числовой тип (включая Byte, SByte и типы перечисления), Boolean, String, Object

CLng

Тип данных Long (Visual Basic)

Любой числовой тип (включая Byte, SByte и типы перечисления), Boolean, String, Object

CObj

Тип данных Object

Любой тип

CSByte

Тип данных SByte (Visual Basic)

Любой числовой тип (включая Byte и типы перечисления), Boolean, String, Object

CShort

Тип данных Short (Visual Basic)

Любой числовой тип (включая Byte, SByte и типы перечисления), Boolean, String, Object

CSng

Тип данных Single (Visual Basic)

Любой числовой тип (включая Byte, SByte и типы перечисления), Boolean, String, Object

CStr

Тип данных String (Visual Basic)

Любой числовой тип (включая Byte, SByte и типы перечисления), Boolean, Char, массив Char, Date, Object

CType

Тип, заданный после запятой (,)

При преобразовании в elementary data type (включая массив простейших типов) — те же типы, которые разрешены для соответствующих зарезервированных слов преобразования.

При преобразовании в composite data type — реализующие их интерфейсы и классы от которых они наследуются

При преобразовании класса или структуры, в которой имеются перегруженные CType, класс или структура

CUInt

Тип данных UInteger

Любой числовой тип (включая Byte, SByte и типы перечисления), Boolean, String, Object

CULng

Тип данных ULong (Visual Basic)

Любой числовой тип (включая Byte, SByte и типы перечисления), Boolean, String, Object

CUShort

Тип данных UShort (Visual Basic)

Любой числовой тип (включая Byte, SByte и типы перечисления), Boolean, String, Object

Функция CType

Функция CType (Visual Basic) имеет два аргумента. Первым является преобразуемое выражение, а вторым — конечный тип данных или класс объекта. Обратите внимание, что первый аргумент должен быть выражением, а не типом.

CType является inline function, то есть скомпилированный код делает преобразование, часто без использования вызова функции. Это повышает производительность.

Для сравнения CType с другими зарезервированными словами преобразования типов см. Оператор DirectCast (Visual Basic) и Оператор TryCast (Visual Basic).

Простые типы

Следующий пример демонстрирует использование CType.

k = CType(q, Integer)
' The following statement coerces w to the specific object class Label.
f = CType(w, Label)

Составные типы

Зарезервированное слово CType используется для преобразования значений в составной тип данных точно так же, как и в простые типы. Используется также для присвоения класса объекта типу одного из его интерфейсов, как в следующем примере:

' Assume class cZone implements interface iZone.
Dim h As Object
' The first argument to CType must be an expression, not a type.
Dim cZ As cZone
' The following statement coerces a cZone object to its interface iZone.
h = CType(cZ, iZone)

Типы массивов

CType преобразует также типы данных массивов, как в следующем примере:

Dim v() As classV
Dim obArray() As Object
' Assume some object array has been assigned to obArray.
' Check for run-time type compatibility.
If TypeOf obArray Is classV()
    ' obArray can be converted to classV.
    v = CType(obArray, classV())
End If

Дополнительные сведения и примеры см. в разделе Преобразование массивов (Visual Basic).

Определение типов CType

Можно определить CType для класса или структуры, определенной пользователем. Это позволяет производить прямое и обратное преобразование значений в (из) типа класса или структуры. Дополнительные сведения и примеры см. в разделе Практическое руководство. Определение оператора преобразования (Visual Basic).

Примечание

Значения, используемые с зарезервированными словами преобразования, должны быть допустимы для конечных типов данных, в противном случае возникнет ошибка.Например при преобразовании типа Long в Integer значение типа Long должно быть в пределах допустимого диапазона для типа данных Integer.

Предупреждение

Указание CType для преобразования из одного типа класса в другой вызовет ошибку во время выполнения, если тип источника не является производным от назначаемого типа.Такой сбой вызовет исключение InvalidCastException.

Однако, если один из типов является структурой или классом, который был определен пользователем, и если пользователь определил CType для структуры или класса, то преобразование может быть успешным, если оно удовлетворяет требованиям CType. См. раздел Практическое руководство. Определение оператора преобразования (Visual Basic).

Выполнение явного преобразования известно также как casting типа выражения к определенному типу данных или классу объекта.

См. также

Задачи

Практическое руководство. Преобразование объекта к другому типу в Visual Basic

Устранение неполадок, связанных с типами данных (Visual Basic)

Ссылки

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

Функции преобразования типов (Visual Basic)

Основные понятия

Изменение значений в процессе преобразований (Visual Basic)

Преобразование значений между строковыми и другими типами (Visual Basic)

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

Другие ресурсы

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

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