Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Представляет операцию преобразования типов на основе наследования или реализации.
Замечания
DirectCast
не использует вспомогательные подпрограммы времени выполнения Visual Basic для преобразования, поэтому он может обеспечить несколько более высокую производительность, чем CType
при преобразовании в тип данных и из него Object
.
Ключевое DirectCast
слово используется аналогично тому, как вы используете функцию CType и ключевое слово TryCast Operator . Вы предоставляете выражение в качестве первого аргумента и типа, чтобы преобразовать его в качестве второго аргумента.
DirectCast
требуется наследование или связь реализации между типами данных двух аргументов. Это означает, что один тип должен наследоваться от другого или реализовать другой.
Ошибки и сбои
DirectCast
Создает ошибку компилятора, если она обнаруживает, что отношения наследования или реализации отсутствуют. Но отсутствие ошибки компилятора не гарантирует успешное преобразование. Если требуемое преобразование сужается, он может завершиться ошибкой во время выполнения. В этом случае среда выполнения выдает ошибку InvalidCastException .
Ключевые слова конверсии
Сравнение ключевых слов преобразования типов выглядит следующим образом.
Ключевое слово | Типы данных | Связь аргументов | Сбой во время выполнения |
---|---|---|---|
Функция CType | Любые типы данных | Преобразование расширения или сужения должно быть определено между двумя типами данных | Бросает 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 наследуется.