DirectCast 演算子 (Visual Basic)
継承または実装に基づく型変換処理を実行します。
解説
DirectCast は Visual Basic のランタイム ヘルパー ルーチンを変換に使用しません。このため、オブジェクト型 (Object) との間で変換を行う場合に、CType よりもいくらかパフォーマンスがよくなります。
キーワード DirectCast は、CType 関数 (Visual Basic) およびキーワード TryCast 演算子 (Visual Basic) と似た方法で使用します。 1 つ目の引数に式を指定し、2 つ目の引数に変換後の型を指定します。 DirectCast の場合、この 2 つの引数のデータ型の間に、継承または実装の関係があることが必要です。 つまり、一方の型が他方を継承しているか、実装している必要があります。
エラー
DirectCast は、継承または実装の関係が存在しないことを検出すると、コンパイル エラーを生成します。 コンパイラ エラーが発生しなくても、変換が成功したとは限りません。 実行する変換が縮小変換である場合、実行時に失敗する可能性があります。 このとき、ランタイムによって InvalidCastException エラーがスローされます。
型変換のキーワード
型変換のキーワードを比較したものを次に示します。
Keyword |
データ型 |
引数の関係 |
実行時のエラー |
Any 型 |
2 つのデータ型の間で拡大変換または縮小変換を定義する必要があります。 |
InvalidCastException をスロー |
|
DirectCast |
Any 型 |
一方の型が他方を継承または実装していることが必要 |
InvalidCastException をスロー |
参照型のみ |
一方の型が他方を継承または実装していることが必要 |
使用例
DirectCast の 2 つの使用例を次に示します。1 つは実行時に失敗し、もう 1 つは成功します。
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) です。 Double は Integer に変換できるので、CType は成功します。 しかし、最初の DirectCast は実行時に失敗します。Double のランタイム型は Integer に変換可能ですが、継承の関係にはないからです。 2 番目の DirectCast は、Form 型から Control 型への変換です。Form は Control を継承しているので成功します。