Оператор DirectCast (Visual Basic)
Представляет операцию преобразования типов на основе наследования или реализации.
Замечания
DirectCast
не использует вспомогательные подпрограммы времени выполнения Visual Basic для преобразования, поэтому он может обеспечить несколько более высокую производительность, чем CType
при преобразовании в тип данных и из него Object
.
Вы используете DirectCast
ключевое слово аналогично тому, как вы используете функцию CType и оператор TryCast ключевое слово. Вы предоставляете выражение в качестве первого аргумента и типа, чтобы преобразовать его в качестве второго аргумента. DirectCast
требуется наследование или связь реализации между типами данных двух аргументов. Это означает, что один тип должен наследоваться от другого или реализовать другой.
Ошибки и сбои
DirectCast
Создает ошибку компилятора, если она обнаруживает, что отношения наследования или реализации отсутствуют. Но отсутствие ошибки компилятора не гарантирует успешное преобразование. Если требуемое преобразование сужается, он может завершиться ошибкой во время выполнения. В этом случае среда выполнения выдает ошибку InvalidCastException .
Ключевые слова преобразований
Сравнение ключевое слово преобразования типов выглядит следующим образом.
Ключевое слово | Типы данных | Связь аргументов | Сбой во время выполнения |
---|---|---|---|
CType Function | Любые типы данных | Преобразование расширения или сужения должно быть определено между двумя типами данных | Бросает InvalidCastException |
DirectCast |
Любые типы данных | Один тип должен наследоваться от другого типа или реализовать другой тип | Бросает InvalidCastException |
Оператор TryCast | Только ссылочные типы | Один тип должен наследоваться от другого типа или реализовать другой тип | Возвращает ничего |
Пример
В следующем примере демонстрируется два использования DirectCast
, один из них завершается сбоем во время выполнения, и один из них успешно выполнен.
Dim q As Object = 2.37
Dim i As Integer = CType(q, Integer)
' The following conversion fails at run time
Dim j As Integer = DirectCast(q, Integer)
Dim f As New System.Windows.Forms.Form
Dim c As System.Windows.Forms.Control
' The following conversion succeeds.
c = DirectCast(f, System.Windows.Forms.Control)
В предыдущем примере тип времени q
выполнения имеет тип Double
. CType
выполняется успешно, так как Double
его можно преобразовать Integer
в . Однако первый DirectCast
сбой во время выполнения, так как тип Double
времени выполнения не имеет отношения наследования, Integer
даже если преобразование существует. DirectCast
Второй выполняется успешно, так как он преобразуется из типа в тип FormControl, от которого Form наследуется.