Utilisation d'opérateurs de conversion (Guide de programmation C#)
Mise à jour : novembre 2007
Les opérateurs de conversion peuvent être explicit ou implicit. Les opérateurs de conversion implicites sont plus faciles à utiliser, mais les opérateurs explicites sont utiles lorsque vous souhaitez que les utilisateurs de l'opérateur soient informés qu'une conversion est en cours. Cette rubrique présente les deux types.
Exemple
Voici un exemple d'opérateur de conversion explicite. Cet opérateur convertit le type Byte en un type valeur appelé Digit. Tous les octets ne pouvant pas être convertis en un chiffre, la conversion est explicite, ce qui signifie qu'un cast doit être utilisé, comme illustré dans la méthode Main.
struct Digit
{
byte value;
public Digit(byte value) //constructor
{
if (value > 9)
{
throw new System.ArgumentException();
}
this.value = value;
}
public static explicit operator Digit(byte b) // explicit byte to digit conversion operator
{
Digit d = new Digit(b); // explicit conversion
System.Console.WriteLine("Conversion occurred.");
return d;
}
}
class TestExplicitConversion
{
static void Main()
{
try
{
byte b = 3;
Digit d = (Digit)b; // explicit conversion
}
catch (System.Exception e)
{
System.Console.WriteLine("{0} Exception caught.", e);
}
}
}
// Output: Conversion occurred.
Cet exemple montre un opérateur de conversion implicite en définissant un opérateur de conversion qui annule ce que l'exemple antérieur a fait : il convertit d'une classe de valeur appelée Digit en type Byte intégral. Tout chiffre pouvant être converti en un Byte, il n'y a aucun besoin de forcer les utilisateurs à être explicites à propos de la conversion.
struct Digit
{
byte value;
public Digit(byte value) //constructor
{
if (value > 9)
{
throw new System.ArgumentException();
}
this.value = value;
}
public static implicit operator byte(Digit d) // implicit digit to byte conversion operator
{
System.Console.WriteLine("conversion occurred");
return d.value; // implicit conversion
}
}
class TestImplicitConversion
{
static void Main()
{
Digit d = new Digit(3);
byte b = d; // implicit conversion -- no cast needed
}
}
// Output: Conversion occurred.
Voir aussi
Concepts
Référence
Opérateurs de conversion (Guide de programmation C#)