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 Doubletyp 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í.

Viz také