Condividi tramite


Utilizzo degli operatori di conversione (Guida per programmatori C#)

Gli operatori di conversione possono essere explicit o implicit. Gli operatori di conversione impliciti sono più facili da utilizzare, mentre gli operatori espliciti risultano utili quando si desidera che gli utenti dell'operatore siano consapevoli che è in corso una conversione. In questo argomento vengono descritti entrambi i tipi.

Esempio 1

In questo caso si parla di operatore di conversione esplicito. Questo operatore esegue la conversione dal tipo Byte a un tipo di valore denominato Digit. Poiché non è possibile convertire in cifre tutti i byte, la conversione è di tipo esplicito ed è pertanto necessario utilizzare un cast, come illustrato nel metodo 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 1

conversion occurred

Esempio 2

In questo esempio viene illustrato un operatore di conversione implicito definendo un operatore di conversione che annulla l'operazione eseguita nell'esempio 1: converte una classe di valori denominata Digit in un tipo Byte integrale. Poiché è possibile convertire ogni cifra in Byte, non è necessario forzare gli utenti ad eseguire una conversione esplicita.

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 2

conversion occurred

Vedere anche

Concetti

Guida per programmatori C#
Operatori di conversione (Guida per programmatori C#)

Altre risorse

Riferimenti per C#