Явные и неявные преобразования (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и перечисленные типы), StringObject
CByte Тип данных Byte Любой числовой тип (включая SByte и перечисленные типы), Boolean, , StringObject
CChar Тип данных Char String, Object
CDate Тип данных Date String, Object
CDbl Тип данных Double Любой числовой тип (включаяByte, SByteи перечисленные типы), Boolean, , StringObject
CDec Тип данных Decimal Любой числовой тип (включаяByte, SByteи перечисленные типы), Boolean, , StringObject
CInt Тип данных Integer Любой числовой тип (включаяByte, SByteи перечисленные типы), Boolean, , StringObject
CLng Тип данных Long Любой числовой тип (включаяByte, SByteи перечисленные типы), Boolean, , StringObject
CObj Object Data Type Любой тип
CSByte Тип данных SByte Любой числовой тип (включая Byte и перечисленные типы), Boolean, , StringObject
CShort Тип данных Short Любой числовой тип (включаяByte, SByteи перечисленные типы), Boolean, , StringObject
CSng Тип данных Single Любой числовой тип (включаяByte, SByteи перечисленные типы), Boolean, , StringObject
CStr Тип данных String Любой числовой тип (включаяByte, и перечисленные типы), Boolean, , CharCharмассив, DateSByteObject
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 определенный класс или структуру. Это позволяет преобразовать значения в тип класса или структуры и из нее. Дополнительные сведения и пример см. в разделе "Практическое руководство. Определение оператора преобразования".

Примечание.

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

Внимание

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

Однако если один из типов является определенной структурой или классом, и если вы CType определили для этой структуры или класса, преобразование может завершиться успешно, если оно соответствует требованиям вашего CType. Узнайте , как определить оператор преобразования.

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

См. также