次の方法で共有


明示的な変換

一部のコンパイラで縮小変換をサポートするためには、明示的な変換を実行する必要があります。明示的な変換は、言語固有の方法で変換を実行します。C#、C++ など一部の言語では、キャストを使用して明示的な変換が実行されます。キャストは、実行する変換の種類を定義するデータ型を変換のプリフィックスとして指定した場合に実行されます。Visual Basic では、暗黙的には変換できないデータ型を明示的に変換できるようにするために、CType 関数が使用されます。共通言語ランタイムに対応する言語のほとんどは明示的な変換をサポートしていますが、具体的な手法は言語ごとに異なります。たとえば、共通言語ランタイムに対応する一部の言語では特定の変換を明示的に実行する必要がありますが、別の言語では同じ変換を暗黙的に実行できる場合もあります。明示的な変換の詳細については、使用する言語のドキュメントを参照してください。

明示的な変換は、チェックを行う方法でも行わない方法でも実行できます。チェックを行う変換を実行すると、変換先の型の最大値が変換元の型の値よりも小さい場合に、OverflowException がスローされます。同じ条件でチェックを行わない変換を実行した場合、値の変換によって例外が発生することはありませんが、実際の動作は不定です。

C# などの言語では、チェックを行わずにキャストを実行できます。この場合には、結果の値が間違った値になっても OverflowException はスローされません。このような変換の動作は不定であり、信頼できる結果は得られません。チェックを行わない C# キャストのコード例を次に示します。

// The integer value is set to 2147483647.
int MyInt = int.MaxValue;
byte MyByte = (byte)Myint;
// The value of MyByte is 255, the maximum value of a Byte.
// No overflow exception is thrown.

Visual Basic でチェックを行う CType 関数を使用した明示的な変換のコード例と、C# でチェックを行うキャストを使用した明示的な変換のコード例を次に示します。この例では、Double123456789 が整数値に変換されます。

Dim MyDouble As Double = 123456789
Dim MyInt As Integer = CType(MyDouble, Integer)
' The value MyInt has the value 123456789. 
double MyDouble = 123456789;
int MyInt = checked ((int)MyDouble);
// The value MyInt has the value 123456789.

明示的な変換で生成される結果は、言語によって異なることがあります。明示的な変換の動作の詳細については、使用する言語のドキュメントを参照してください。たとえば、Visual Basic で CType 関数を使用して Double 値を Int32 値に変換すると、結果の値は丸められます。しかし、C# で明示的な変換を使用して同じ変換を実行した場合、小数点以下の値は切り捨てられます。明示的な変換を使用して倍精度浮動小数点値を整数値に変換するコード例を次に示します。

Dim MyDouble As Double = 42.72
Dim MyInt As Integer = CType(MyDouble, Integer)
' MyInt has the value of 43.
Double MyDouble = 42.72;
int MyInt = checked ((int)MyDouble);
// MyInt has the value of 42.

参照

関連項目

System.Convert

その他の技術情報

型の変換