Compartir a través de


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

Puede usar los operadores de conversión implicit, que son más fáciles de usar, o los operadores de conversión explicit, que indican claramente a cualquiera que lea el código que está convirtiendo un tipo. En este tema se muestran ambos tipos de operadores de conversión.

NotaNota

Para obtener más información sobre las conversiones de tipos simples, vea Cómo: Convertir una cadena en un número (Guía de programación de C#), Cómo: Convertir una matriz de bytes en un valor int (Guía de programación de C#), Cómo: Convertir cadenas hexadecimales en tipos numéricos (Guía de programación de C#) o Convert.

Ejemplo

Este 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 usar 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 entero Byte. Dado que cualquier dígito se puede convertir en Byte, no hay ninguna necesidad de obligar a los usuarios a que definan explícitamente 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#)

is (Referencia de C#)

Conceptos

Guía de programación de C#

Otros recursos

Referencia de C#