Compartir a través de


Utilizar operadores de conversión (Guía de programación de C#)

Los operadores de conversión pueden ser explicit o implicit. Los operadores de conversión implícita son más fáciles de utilizar, pero los operadores explícitos son útiles cuando se desea que los usuarios del operador sepan que está teniendo lugar una conversión. En este tema se muestran ambos tipos.

Ejemplo

Éste es un ejemplo de un operador de conversión explícita. Este operador convierte el tipo Byte en un tipo de valor denominado Digit. Como no todos los bytes se pueden convertir en valores de tipo digit, la conversión es explícita, lo que significa que se debe utilizar una conversión, como se muestra en el método 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.

En este ejemplo se muestra un operador de conversión implícita mediante la definición de un operador de conversión que deshace lo que hizo el ejemplo anterior: convierte una clase de valor denominada Digit en el tipo integral Byte. Dado que cualquier dígito se puede convertir en Byte, no hay ninguna necesidad de obligar a los usuarios a que definan la conversión.

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.

Vea también

Referencia

Operadores de conversión (Guía de programación de C#)

Conceptos

Guía de programación de C#

Otros recursos

Referencia de C#