明確轉換
有些編譯器會要求進行明確轉換,才能支援縮小轉換。這是一種與語言相關的執行轉換方式。在某些語言 (例如 C# 和 C++) 中,明確轉換是使用轉型來執行的。當您在轉換前加上定義要執行的轉換型別的資料型別時,便會發生轉型。在 Visual Basic 中,使用 CType 函式可允許不能以隱含方式執行的資料型別明確轉換。雖然大多數以 Common Language Runtime 為目標的語言都支援明確轉換,但是實際使用的機制則會因語言而不同。有些以 Common Language Runtime 為目標的語言可能會要求特定轉換必須以明確方式執行,而其他的語言則允許相同的轉換以隱含方式執行。如需瞭解明確轉換的詳細資訊,請參考所使用語言的文件。
明確轉換可用已檢查或未檢查的方式執行。如果執行已檢查的轉換,當目標型別的最大值小於轉換型別的值時,會擲回 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# 中使用已檢查的轉型的明確轉換。在這個範例中,會將 123456789
的 Double 值轉換成整數值。
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# 中使用明確轉換執行相同的轉換時,小數點右邊的值會不見。下列程式碼範例會使用明確轉換,將雙精度浮點數 (Double) 值轉換成整數值。
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.