拡大変換と縮小変換 (Visual Basic)

型変換で考慮しなければならない重要な点は、変換結果が変換先データ型の範囲内に入るかどうかということです。

拡大変換では 変換元のデータの各値を可能にするデータ型に変更します。 拡大変換では、元の値は保持されますが、その表現は変化する場合があります。 これは整数型から Decimal に変換する場合はChar から String に発生します。

縮小変換では、値の一部を保持できない可能性があるデータ型に変更されます。 たとえば小数値は整数型に変換されるBoolean 数値型はに変換されると True かになります False とはどちらも。

拡大変換

次の表は、標準の拡大変換を示しています。

データ型

拡大変換後のデータ型 1

SByte

SByte, Short, Integer, Long, Decimal, Single, Double

Byte

Byte, Short, UShort, Integer, UInteger, Long, ULong, Decimal, Single, Double

Short

Short, Integer, Long, Decimal, Single, Double

UShort

UShort, Integer, UInteger, Long, ULong, Decimal, Single, Double

整数型

Integer, Long, Decimal, Single, Double2

UInteger

UInteger, Long, ULong, Decimal, Single, Double 2

Long

Long, Decimal, Single, Double 2

ULong

ULong, Decimal, Single, Double 2

10 進数

Decimal, Single, Double 2

Single

Single, Double

Double

Double

すべての列挙型 (Enum)

その基になる整数型や基になる型に相当する型。

Char

Char, String

Char 配列

Char 配列、String

任意の型

Object

すべての派生型

派生元の基本 3 型。

任意の型

このインターフェイスを実装します。

Nothing

データ型またはオブジェクト型。

1 定義上、すべてのデータ型は自動的に拡大されます。

2 Integer、UInteger、Long、ULong、または Decimal から Single または Double への変換は、精度が失われる結果となる可能性がありますが、桁数が失われることはありません。 この意味で考えると、情報の損失は起こりません。

3 派生型からその基本型への変換は拡大変換になります。 派生型には基本型のすべてのメンバーが含まれるため、基本型のインスタンスとして扱うことができるためです。 逆に、基本型では派生型で定義されたメンバーが含まれていません。

拡大変換は、実行時には常に正常に行われ、データ消失が発生することはありません。 Option Strict ステートメントで型チェック スイッチを On または Off に設定して、拡大変換を常に暗黙的に実行できます。

縮小変換

標準の縮小変換は次のとおりです。

  • 前の表で示した拡大変換の逆方向 (それ自体に拡大変換する場合の型を除く)

  • ブール型 (Boolean) と任意の数値型の間の相互変換

  • 任意の数値型から任意の列挙型への変換 (Enum)

  • 文字列型と、任意の数値型、Boolean、または日付型の間の相互変換

  • データ型またはオブジェクト型の、その派生型への変換

縮小変換は、実行時に常に正しく実行されるとは限りません。したがって失敗またはデータを消失する可能性があります。 変換先のデータ型で変換対象の値を受け入れることができない場合に、エラーが発生します。 たとえば、数値変換ではオーバーフローが発生することがあります。 コンパイラは、Option Strict ステートメントで型チェック スイッチが Off に設定されていない限り、暗黙的な縮小変換の実行を許可しません。

注意

For Each…Next コレクション内の要素からループ制御変数への変換に対して縮小変換エラーが抑制されます。詳細および例については、「For Each...Next ステートメント (Visual Basic)」の「縮小変換」セクションを参照してください。

縮小変換を使用するタイミング

変換元の値を変換先のデータ型に変換でき、エラーまたはデータの消失が発生しないことがわかっている場合に、縮小変換を使用します。 たとえば含む 「 true 」または 「 false を String がわかっている場合は」Boolean に変換するために CBool のキーワードを使用します。

変換中の例外

拡大変換は常に正しく実行されるため、例外をスローすることはありません。 縮小変換が失敗すると、通常は次の例外をスローします。

  • InvalidCastException — 2 つの型の間で変換が定義されていない場合

  • OverflowException — (整数型の場合のみ) 変換された値が対象の型にしては大きすぎる場合

クラスまたは構造体で CType 関数 (Visual Basic)を定義して、そのクラスまたは構造体の間の変換演算子として機能させると、その CType は適切と見なされる例外をスローできます。 さらに、その CType は Visual Basic 関数または .NET Framework メソッドを呼び出して、さまざまな例外を順番にスローできます。

参照型変換での変化

参照型からの変換では、値へのポインターだけがコピーされます。 値自体のコピーや変更は行われません。 変化する可能性があるのは、ポインターを保持する変数のデータ型だけです。 次の例では、データ型が派生クラスから基本クラスに変換されますが、両方の変数が指すことになるオブジェクトは変化しません。

' Assume class cSquare inherits from class cShape.
Dim shape As cShape
Dim square As cSquare = New cSquare
' The following statement performs a widening
' conversion from a derived class to its base class.
shape = square

参照

処理手順

方法: Visual Basic でオブジェクトを別の型に変換する

関連項目

データ型の概要 (Visual Basic)

データ型変換関数 (Visual Basic)

概念

Visual Basic におけるデータ型

暗黙の型変換と明示的な型変換 (Visual Basic)

文字列とその他の型との変換 (Visual Basic)

配列の変換 (Visual Basic)

その他の技術情報

Visual Basic における型変換