Utilisation d'opérateurs de conversion (guide de programmation C#)
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 1
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);
}
}
}
Sortie 1
conversion occurred
Exemple 2
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
}
}
Sortie 2
conversion occurred
Voir aussi
Concepts
Guide de programmation C#
Opérateurs de conversion (guide de programmation C#)