Conversion Operators C# with Example
In C#, types can define custom Conversion Operators, which allow values to be converted to and from other types using either explicit or implicit casts. For example, consider a class that is meant to represent a JavaScript expression: 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 + ")"); } } If we wanted to create a JsExpression representing a comparison of two JavaScript values, we could do something like this: JsExpression intExpression = new JsExpression("-1"); JsExpression doubleExpression = new JsExpression("-1.0"); Console.WriteLine(intExpression.IsEqualTo(doubleExpression)); // (-1 == -1.0) But we can add some explicit conversion operators to JsExpression, to allow a simple conversion when using explicit casting. public static explicit operator JsExpression(int value) { return new JsExpression(value.ToString()); } public static explicit operator JsExpression(double value) { return new JsExpression(value.ToString()); } // Usage: JsExpression intExpression = (JsExpression)(-1); JsExpression doubleExpression = (JsExpression)(-1.0); Console.WriteLine(intExpression.IsEqualTo(doubleExpression)); // (-1 == -1.0) Or, we could change these operators to implicit to make the syntax much simpler. public static implicit operator JsExpression(int value) { return new JsExpression(value.ToString()); } public static implicit operator JsExpression(double value) { return new JsExpression(value.ToString()); } // Usage: JsExpression intExpression = -1; Console.WriteLine(intExpression.IsEqualTo(-1.0)); // (-1 == -1.0)