DirectCast – operátor (Visual Basic)
Zavádí operaci převodu typu na základě dědičnosti nebo implementace.
Poznámky
DirectCast
nepoužívá pomocné rutiny za běhu jazyka Visual Basic pro převod, takže může poskytovat poněkud lepší výkon než CType
při převodu na datový typ a z datového typu Object
.
Klíčové slovo se podobá DirectCast
způsobu použití funkce CType a klíčového slova TryCast – operátor . Jako první argument zadáte výraz a typ, který ho převede jako druhý argument. DirectCast
vyžaduje vztah dědičnosti nebo implementace mezi datovými typy těchto dvou argumentů. To znamená, že jeden typ musí dědit nebo implementovat druhý typ.
Chyby a chyby
DirectCast
generuje chybu kompilátoru, pokud zjistí, že neexistuje žádný vztah dědičnosti nebo implementace. Nedostatek chyby kompilátoru ale nezaručuje úspěšný převod. Pokud se požadovaný převod zužuje, může selhat za běhu. Pokud k tomu dojde, modul runtime vyvolá InvalidCastException chybu.
Klíčová slova převodu
Porovnání klíčových slov převodu typů je následující.
Klíčové slovo | Datové typy | Relace argumentů | Selhání za běhu |
---|---|---|---|
Funkce CType | Všechny datové typy | Mezi těmito dvěma datovými typy musí být definován rozšiřující nebo zúžený převod. | Vyvolá InvalidCastException |
DirectCast |
Všechny datové typy | Jeden typ musí dědit nebo implementovat druhý typ. | Vyvolá InvalidCastException |
Operátor TryCast | Pouze odkazové typy | Jeden typ musí dědit nebo implementovat druhý typ. | Vrátí hodnotu Nothing. |
Příklad
Následující příklad ukazuje dvě použití DirectCast
, jeden, který selže za běhu a jeden, který je úspěšný.
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)
V předchozím příkladu je Double
typ běhu typu q
. CType
úspěšně, protože Double
lze převést na Integer
. První DirectCast
selže v době běhu, protože typ Double
běhu nemá žádný vztah dědičnosti s Integer
, i když existuje převod. Druhá DirectCast
je úspěšná, protože se převede z typu Form na typ Control, ze kterého Form dědí.