Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Неявное преобразование не требует специального синтаксиса в исходном коде. В следующем примере 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 |
Тип данных byte | Любой числовой тип (включая SByte и перечисленные типы), Boolean , , String Object |
CChar |
Тип данных Char |
String , Object |
CDate |
Тип данных Дата |
String , Object |
CDbl |
Тип данных Double | Любой числовой тип (включая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 |
Тип данных SByte | Любой числовой тип (включая Byte и перечисленные типы), Boolean , , String Object |
CShort |
Короткий тип данных | Любой числовой тип (включаяByte , SByte и перечисленные типы), Boolean , , String Object |
CSng |
Тип данных Single | Любой числовой тип (включаяByte , SByte и перечисленные типы), Boolean , , String Object |
CStr |
Тип данных строки | Любой числовой тип (включая Byte , SByte и перечисленные типы), Boolean , Char , Char массив, Date , Object |
CType |
Тип, указанный после запятой (, ) |
При преобразовании в элементарный тип данных (включая массив элементарного типа), те же типы, что допускаются для соответствующего ключевого слова преобразования. При преобразовании в составной тип данных учитываются интерфейсы, которые он реализует, и классы, от которых он наследуется. При преобразовании в класс или структуру, в которой перегружен оператор CType , этот класс или структура |
CUInt |
Тип данных UInteger | Любой числовой тип (включаяByte , SByte и перечисленные типы), Boolean , , String Object |
CULng |
Тип данных ULong | Любой числовой тип (включаяByte , SByte и перечисленные типы), Boolean , , String Object |
CUShort |
Тип данных UShort | Любой числовой тип (включаяByte , SByte и перечисленные типы), Boolean , , String Object |
Функция CType
Функция CType работает с двумя аргументами. Первое — это выражение, которое необходимо преобразовать, а второй — конечный тип данных или класс объектов. Обратите внимание, что первый аргумент должен быть выражением, а не типом.
CType
— это встроенная функция, т. е. скомпилированный код делает преобразование часто без создания вызова функции. Это повышает производительность.
Сравнение CType
с другими ключевыми словами преобразования типов см. в разделе "Оператор DirectCast" и "Оператор TryCast".
Простые типы
В следующем примере показано использование 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
Дополнительные сведения и пример см. в разделе "Преобразования массивов".
Типы, определяющие CType
Вы можете определить CType
для класса или структуры, которые вы определили. Это позволяет преобразовывать значения в и из типа вашего класса или структуры. Дополнительные сведения и пример см. в разделе "Практическое руководство. Определение оператора преобразования".
Замечание
Значения, используемые с ключевым словом преобразования, должны быть допустимыми для целевого типа данных или возникает ошибка. Например, если вы пытаетесь преобразовать Long
в Integer
, значение Long
должно находиться в допустимом диапазоне для Integer
типа данных.
Осторожность
Указание CType
для преобразования одного типа класса в другой приводит к ошибке во время выполнения, если исходный тип не является производным от целевого типа. Подобный сбой InvalidCastException вызывает исключение.
Однако если один из типов является определенной структурой или классом, и если вы CType
определили для этой структуры или класса, преобразование может завершиться успешно, если оно соответствует требованиям вашего CType
. Узнайте , как определить оператор преобразования.
Выполнение явного преобразования также называется приведение выражения к заданному типу данных или классу объектов.