explicit 关键字用于声明必须使用强制转换来调用的用户定义的类型转换运算符。例如,在下面的示例中,此运算符将名为 Fahrenheit 的类转换为名为 Celsius 的类:
public static explicit operator Celsius(Farenheit f) {//我这么定义 return new Celsius((5.0f/9.0f)*(f.degrees-32)); } //就能这么用 Farenheit f = new Farenheit(100.0f); Celsius c = (Celsius)f;
implicit 关键字用于声明隐式的用户定义类型转换运算符。如果可以确保转换过程不会造成数据丢失,则可使用该关键字在用户定义类型和其他类型之间进行隐式转换。
public static implicit operator double(Digit d) { return d.val; } 则 Digit dig = new Digit(7); double num = dig;
operator 关键字来重载内置运算符,或提供类或结构声明中的用户定义转换
class Fraction { int num, den; public Fraction(int num, int den) { this.num = num; this.den = den; } //重载运算符 + public static Fraction operator +(Fraction a, Fraction b) { return new Fraction(a.num * b.den + b.num * a.den, a.den * b.den); } // 重载运算符 * public static Fraction operator *(Fraction a, Fraction b) { return new Fraction(a.num * b.num, a.den * b.den); } // 设置强制类型转换 public static implicit operator double(Fraction f) { return (double)f.num / f.den; } } class Test { static void Main() { Fraction a = new Fraction(1, 2); Fraction b = new Fraction(3, 7); Fraction c = new Fraction(2, 3); Console.WriteLine((double)(a * b + c)); } }