Comment : implémenter des conversions définies par l'utilisateur entre des structs (Guide de programmation C#)
L'exemple suivant définit deux structures, RomanNumeral et BinaryNumeral, et décrit les conversions entre ces deux structures.
Exemple
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 to string is not 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 to string is not 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);
// Keep the console window open in debug mode.
System.Console.WriteLine("Press any key to exit.");
System.Console.ReadKey();
}
}
/* Output:
10
Conversion not yet implemented
*/
Programmation fiable
Dans l'exemple précédent, l'instruction :
binary = (BinaryNumeral)(int)roman;
convertit un RomanNumeral en BinaryNumeral. Étant donné qu'il n'existe pas de conversion directe de RomanNumeral vers BinaryNumeral, un cast est utilisé pour convertir un RomanNumeral en un int et un autre cast pour convertir ce dernier en un BinaryNumeral.
L'instruction
roman = binary;
convertit un BinaryNumeral en RomanNumeral. Étant donné que RomanNumeral définit une conversion implicite d'un BinaryNumeral, aucun cast n'est requis.
Voir aussi
Référence
Opérateurs de conversion (Guide de programmation C#)