Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
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)