How to: Implement User-Defined Conversions Between Structs (C# Programming Guide)
This example defines two structs, RomanNumeral
and BinaryNumeral
, and demonstrates conversions between them.
Example
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 not yet 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 not yet 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);
}
}
Output
10 Conversion not yet implemented
Robust Programming
In the previous example, the statement:
binary = (BinaryNumeral)(int)roman;
performs a conversion from a
RomanNumeral
to aBinaryNumeral
. Because there is no direct conversion fromRomanNumeral
toBinaryNumeral
, a cast is used to convert from aRomanNumeral
to an int, and another cast to convert from an int to aBinaryNumeral
.Also the statement
roman = binary;
performs a conversion from a
BinaryNumeral
to aRomanNumeral
. BecauseRomanNumeral
defines an implicit conversion fromBinaryNumeral
, no cast is required.
See Also
Concepts
C# Programming Guide
Conversion Operators (C# Programming Guide)