使用轉換運算子 (C# 程式設計手冊)
轉換運算子可以為 explicit 或 implicit。隱含轉換運算子較容易使用,但當您希望運算子的使用者注意到轉換正在進行時,明確運算子會很有用。此主題會示範兩種型別。
範例
下面示範如何使用明確轉換運算子。此運算子會從 Byte 型別轉換至名為 Digit 的數值型別。因為並非所有的位元都可以轉換成數字,所以轉換是明確的,意思就是必須使用轉型 (Cast),如 Main 方法中所示。
struct Digit
{
byte value;
public Digit(byte value) //constructor
{
if (value > 9)
{
throw new System.ArgumentException();
}
this.value = value;
}
public static explicit operator Digit(byte b) // explicit byte to digit conversion operator
{
Digit d = new Digit(b); // explicit conversion
System.Console.WriteLine("Conversion occurred.");
return d;
}
}
class TestExplicitConversion
{
static void Main()
{
try
{
byte b = 3;
Digit d = (Digit)b; // explicit conversion
}
catch (System.Exception e)
{
System.Console.WriteLine("{0} Exception caught.", e);
}
}
}
// Output: Conversion occurred.
此範例示範隱含轉換運算子,方法為定義會復原先前範例所執行作業的轉換運算子:它會從名為 Digit 的數值類別轉換成整數 Byte 型別。因為任何數字都可轉換成 Byte,所以不需要強制使用者明確轉換。
struct Digit
{
byte value;
public Digit(byte value) //constructor
{
if (value > 9)
{
throw new System.ArgumentException();
}
this.value = value;
}
public static implicit operator byte(Digit d) // implicit digit to byte conversion operator
{
System.Console.WriteLine("conversion occurred");
return d.value; // implicit conversion
}
}
class TestImplicitConversion
{
static void Main()
{
Digit d = new Digit(3);
byte b = d; // implicit conversion -- no cast needed
}
}
// Output: Conversion occurred.