Conversion Operators C# with Example



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) 
 

0 Comment's

Comment Form