使用转换运算符(C# 编程指南)
转换运算符可以是 explicit,也可以是 implicit。隐式转换运算符更容易使用,但是如果您希望运算符的用户能够意识到正在进行转换,则显式运算符很有用。此主题演示了这两种类型。
示例
这是显式转换运算符的一个示例。此运算符将类型 Byte 转换为称为 Digit 的值类型。由于不是所有字节都可以转换为数字,因此转换是显式的,这意味着必须使用强制转换,如 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.