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