Явные и неявные преобразования (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 |
Любой числовой тип (включая Byte, SByte и типы перечисления) String, Object |
|
CByte |
Любой числовой тип (включая SByte и перечисляемые типы), Boolean, String, Object |
|
CChar |
String, Object |
|
CDate |
String, Object |
|
CDbl |
Любой числовой тип (включая Byte, SByte и типы перечисления), Boolean, String, Object |
|
CDec |
Любой числовой тип (включая Byte, SByte и типы перечисления), Boolean, String, Object |
|
CInt |
Любой числовой тип (включая Byte, SByte и типы перечисления), Boolean, String, Object |
|
CLng |
Любой числовой тип (включая Byte, SByte и типы перечисления), Boolean, String, Object |
|
CObj |
Любой тип |
|
CSByte |
Любой числовой тип (включая Byte и типы перечисления), Boolean, String, Object |
|
CShort |
Любой числовой тип (включая Byte, SByte и типы перечисления), Boolean, String, Object |
|
CSng |
Любой числовой тип (включая Byte, SByte и типы перечисления), Boolean, String, Object |
|
CStr |
Любой числовой тип (включая Byte, SByte и типы перечисления), Boolean, Char, массив Char, Date, Object |
|
CType |
Тип, заданный после запятой (,) |
При преобразовании в elementary data type (включая массив простейших типов) — те же типы, которые разрешены для соответствующих зарезервированных слов преобразования. При преобразовании в composite data type — реализующие их интерфейсы и классы от которых они наследуются При преобразовании класса или структуры, в которой имеются перегруженные CType, класс или структура |
CUInt |
Любой числовой тип (включая Byte, SByte и типы перечисления), Boolean, String, Object |
|
CULng |
Любой числовой тип (включая Byte, SByte и типы перечисления), Boolean, String, Object |
|
CUShort |
Любой числовой тип (включая 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)