标签:implicit explicit 字符转换 隐式转换 显示转换
转换运算符: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.
implicit隐式转换:
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.
struct RomanNumeral { private int value; public RomanNumeral(int value) //constructor { this.value = value; } static public implicit operator RomanNumeral(int value) { return new RomanNumeral(value); } static public implicit operator RomanNumeral(BinaryNumeral binary) { return new RomanNumeral((int)binary); } static public explicit operator int(RomanNumeral roman) { return roman.value; } static public implicit operator string(RomanNumeral roman) { return ("Conversion to string is not implemented"); } } struct BinaryNumeral { private int value; public BinaryNumeral(int value) //constructor { this.value = value; } static public implicit operator BinaryNumeral(int value) { return new BinaryNumeral(value); } static public explicit operator int(BinaryNumeral binary) { return (binary.value); } static public implicit operator string(BinaryNumeral binary) { return ("Conversion to string is not implemented"); } } class TestConversions { static void Main() { RomanNumeral roman; BinaryNumeral binary; roman = 10; // Perform a conversion from a RomanNumeral to a BinaryNumeral: binary = (BinaryNumeral)(int)roman; // Perform a conversion from a BinaryNumeral to a RomanNumeral: // No cast is required: roman = binary; System.Console.WriteLine((int)binary); System.Console.WriteLine(binary); // Keep the console window open in debug mode. System.Console.WriteLine("Press any key to exit."); System.Console.ReadKey(); } } /* Output: 10 Conversion not yet implemented */
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:implicit explicit 字符转换 隐式转换 显示转换
原文地址:http://blog.csdn.net/alvin930403/article/details/46917829