在C#中,类型可以定义自定义的转换运算符,该运算符允许使用显式或隐式强制转换将值与其他类型进行相互转换。例如,考虑一个旨在表示JavaScript表达式的类:
public class JsExpression { private readonly string expression; public JsExpression(string rawExpression) { this.expression= rawExpression; } public override string ToString() { return this.expression; } public JsExpression IsEqualTo(JsExpression other) { return new JsExpression("(" + this + " == " + other + ")"); } }
如果我们想创建一个JsExpression来表示两个JavaScript值的比较,则可以执行以下操作:
JsExpression intExpression = new JsExpression("-1"); JsExpression doubleExpression = new JsExpression("-1.0"); Console.WriteLine(intExpression.IsEqualTo(doubleExpression)); // (-1 == -1.0)
但是,我们可以补充一些明确的转换操作符来JsExpression,使用显式转换时,允许一个简单的转换。
public static explicit operator JsExpression(int value) { return new JsExpression(value.ToString()); } public static explicit operator JsExpression(double value) { return new JsExpression(value.ToString()); } // 用法: JsExpression intExpression = (JsExpression)(-1); JsExpression doubleExpression = (JsExpression)(-1.0); Console.WriteLine(intExpression.IsEqualTo(doubleExpression)); // (-1 == -1.0)
或者,我们可以将这些运算符更改为隐式,以简化语法。
public static implicit operator JsExpression(int value) { return new JsExpression(value.ToString()); } public static implicit operator JsExpression(double value) { return new JsExpression(value.ToString()); } // 用法: JsExpression intExpression = -1; Console.WriteLine(intExpression.IsEqualTo(-1.0)); // (-1 == -1.0)