Utilisation d'opérateurs de conversion (Guide de programmation C#)
Il est possible d'utiliser les opérateurs de conversion implicit, qui sont plus faciles à utiliser, ou les opérateurs de conversion explicit, qui indiquent clairement à tout personne lisant le code que l'on convertit un type. Cette rubrique illustre les deux types d'opérateurs de conversion.
Notes
Pour plus d'informations sur les conversions de types simples, consultez Comment : convertir une chaîne en nombre (Guide de programmation C#), Comment : convertir un tableau de byte en int (Guide de programmation C#), Comment : effectuer une conversion entre des chaînes hexadécimales et des types numériques (Guide de programmation C#), ou Convert.
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
Référence
Opérateurs de conversion (Guide de programmation C#)