Verwenden von Konvertierungsoperatoren (C#-Programmierhandbuch)Using Conversion Operators (C# Programming Guide)

Sie können die einfacheren implicit-Konvertierungsoperatoren verwenden oder die explicit-Konvertierungsoperatoren, die eindeutig signalisieren, dass ein Typ konvertiert wird.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. In diesem Thema werden beide Typen von Konvertierungsoperatoren veranschaulicht.This topic demonstrates both types of conversion operator.

BeispielExample

Dies ist ein Beispiel eines expliziten Konvertierungsoperators.This is an example of an explicit conversion operator. Dieser Operator konvertiert den Typ Byte in den Wertetyp Digit.This operator converts from the type Byte to a value type called Digit. Da nicht alle Bytes in eine Ziffer konvertiert werden können, ist die Konvertierung explizit. Das bedeutet, dass eine Umwandlung verwendet werden muss, wie in der Main-Methode dargestellt wird.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.

BeispielExample

In diesem Beispiel wird ein impliziter Konvertierungsoperator dargestellt. Es wird ein Konvertierungsoperator definiert, der das Ergebnis des vorherigen Beispiels rückgängig macht: Er konvertiert die Wertklasse Digit in den ganzzahligen Typ 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. Da sich alle Ziffern in ein Byte konvertieren lassen, besteht kein Anlass, die explizite Konvertierung zu erzwingen.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.

Siehe auchSee Also

C#-ReferenzC# Reference
C#-ProgrammierhandbuchC# Programming Guide
KonvertierungsoperatorenConversion Operators
isis