Freigeben über


Verwenden von Konvertierungsoperatoren (C#-Programmierhandbuch)

Konvertierungsoperatoren können explicit oder implicit sein. Implizite Konvertierungsoperatoren sind leichter zu verwenden, aber explizite Operatoren sind nützlich, wenn sie möchten, dass die Benutzer des Operators über die stattfindende Konvertierung Bescheid wissen. In diesem Thema werden beide Typen veranschaulicht.

Beispiel

Dies ist ein Beispiel eines expliziten Konvertierungsoperators. Dieser Operator konvertiert vom Byte-Typ in den Digit-Werttyp. 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.

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.

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 von einer Wertklasse mit dem Namen Digit in den ganzzahligen Byte-Typ. Da sich alle Ziffern in ein Byte konvertieren lassen, besteht kein Anlass, Benutzern die Konvertierung explizit mitzuteilen.

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 auch

Referenz

Konvertierungsoperatoren (C#-Programmierhandbuch)

Konzepte

C#-Programmierhandbuch

Weitere Ressourcen

C#-Referenz