Partager via


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.

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#)

is (référence C#)

Concepts

Guide de programmation C#

Autres ressources

Référence C#