Явные и неявные преобразования (Visual Basic)
Неявное преобразование не требует специального синтаксиса в исходном коде. В следующем примере 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 |
Тип данных Date | String , Object |
CDbl |
Тип данных Double | Любой числовой тип (включаяByte , SByte и перечисленные типы), Boolean , , String Object |
CDec |
Тип данных Decimal | Любой числовой тип (включаяByte , SByte и перечисленные типы), Boolean , , String Object |
CInt |
Тип данных Integer | Любой числовой тип (включаяByte , SByte и перечисленные типы), Boolean , , String Object |
CLng |
Тип данных Long | Любой числовой тип (включаяByte , SByte и перечисленные типы), Boolean , , String Object |
CObj |
Object Data Type | Любой тип |
CSByte |
Тип данных SByte | Любой числовой тип (включая Byte и перечисленные типы), Boolean , , String Object |
CShort |
Тип данных Short | Любой числовой тип (включаяByte , SByte и перечисленные типы), Boolean , , String Object |
CSng |
Тип данных Single | Любой числовой тип (включаяByte , SByte и перечисленные типы), Boolean , , String Object |
CStr |
Тип данных String | Любой числовой тип (включаяByte , и перечисленные типы), Boolean , , Char Char массив, Date SByte 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
. Узнайте , как определить оператор преобразования.
Выполнение явного преобразования также называется приведение выражения к заданному типу данных или классу объектов.