更新:2007 年 11 月
转换运算符可以是 explicit,也可以是 implicit。隐式转换运算符更容易使用,但是如果您希望运算符的用户能够意识到正在进行转换,则显式运算符很有用。此主题演示了这两种类型。
示例
这是显式转换运算符的一个示例。此运算符将类型
C# | 复制代码 |
---|---|
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 的值类转换为整数
C# | 复制代码 |
---|---|
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. |