Compartilhar via


Usando operadores de conversão (C# guia de programação)

Os operadores de conversão podem ser explicit ou implicit. Operadores de conversão implícita são mais fáceis de usar, mas os operadores explícitas são úteis quando você deseja que os usuários do operador para estar ciente de que uma conversão está ocorrendo. Este tópico demonstra os dois tipos.

Exemplo

Este é um exemplo de um operador de conversão explícita. Este operador converte do tipo Byte para um tipo de valor chamado Digit. Porque nem todos os bytes podem ser convertidos para um dígito, a conversão é explícita, o que significa que uma conversão deve ser usada, conforme mostrado na Main método.

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.

Este exemplo demonstra um operador de conversão implícita, definindo um operador de conversão, desfaz o que fez o exemplo anterior: Converte de uma classe de valor chamada Digit para a integral Byte tipo. Porque qualquer dígito pode ser convertido em um Byte, não é necessário forçar os usuários a ser explícitos sobre a conversão.

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.

Consulte também

Referência

Operadores de conversão (guia de programação de C#)

Conceitos

C# Programming Guide

Outros recursos

C# Reference