Compartilhar via


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

Operadores de conversão podem ser explicit ou implicit.Operadores de conversão implícita são mais fáceis de usar, mas operadores explícitas são úteis quando você deseja que os usuários do operador deve 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 do 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 que 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 para um Byte, não é necessário forçar os usuários a ser explícito 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 do C#)

é (referência de C#)

Conceitos

Guia de programação do C#

Outros recursos

Referência de C#