Utilizar operadores de conversión (Guía de programación de C#)Using Conversion Operators (C# Programming Guide)

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.You can use implicit conversion operators, which are easier to use, or explicit conversion operators, which clearly indicate to anyone reading the code that you're converting a type. En este tema se muestran ambos tipos de operadores de conversión.This topic demonstrates both types of conversion operator.

EjemploExample

Este es un ejemplo de un operador de conversión explícita.This is an example of an explicit conversion operator. Este operador convierte el tipo Byte en un tipo de valor denominado Digit.This operator converts from the type Byte to a value type called 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.Because not all bytes can be converted to a digit, the conversion is explicit, meaning that a cast must be used, as shown in the Main method.

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.

EjemploExample

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.This example demonstrates an implicit conversion operator by defining a conversion operator that undoes what the previous example did: it converts from a value class called Digit to the integral Byte type. 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.Because any digit can be converted to a Byte, there's no need to force users to be explicit about the conversion.

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énSee also