(0) exportieren Drucken
Alle erweitern

Gewusst wie: Implementieren von benutzerdefinierten Konvertierungen zwischen Strukturen (C#-Programmierhandbuch)

In diesem Beispiel werden die beiden Strukturen RomanNumeral und BinaryNumeral definiert, und es werden die Konvertierungen zwischen diesen Strukturen veranschaulicht.

Beispiel

struct RomanNumeral
{
    private int value;

    public RomanNumeral(int value)  //constructor
    {
        this.value = value;
    }

    static public implicit operator RomanNumeral(int value)
    {
        return new RomanNumeral(value);
    }

    static public implicit operator RomanNumeral(BinaryNumeral binary)
    {
        return new RomanNumeral((int)binary);
    }

    static public explicit operator int(RomanNumeral roman)
    {
        return roman.value;
    }

    static public implicit operator string(RomanNumeral roman)
    {
        return ("Conversion not yet implemented");
    }
}

struct BinaryNumeral
{
    private int value;

    public BinaryNumeral(int value)  //constructor
    {
        this.value = value;
    }

    static public implicit operator BinaryNumeral(int value)
    {
        return new BinaryNumeral(value);
    }

    static public explicit operator int(BinaryNumeral binary)
    {
        return (binary.value);
    }

    static public implicit operator string(BinaryNumeral binary)
    {
        return ("Conversion not yet implemented");
    }
}

class TestConversions
{
    static void Main()
    {
        RomanNumeral roman;
        BinaryNumeral binary;

        roman = 10;

        // Perform a conversion from a RomanNumeral to a BinaryNumeral:
        binary = (BinaryNumeral)(int)roman;

        // Perform a conversion from a BinaryNumeral to a RomanNumeral:
        // No cast is required:
        roman = binary;

        System.Console.WriteLine((int)binary);
        System.Console.WriteLine(binary);
    }
}

Ausgabe

10
Conversion not yet implemented

Robuste Programmierung

  • Im vorherigen Beispiel wird durch die Anweisung

    binary = (BinaryNumeral)(int)roman;
    
    

    eine Konvertierung von RomanNumeral in BinaryNumeral durchgeführt. Da es keine direkte Konvertierung von RomanNumeral in BinaryNumeral gibt, wird RomanNumeral mithilfe einer Typumwandlung in einen int-Typ konvertiert und mit einer weiteren Typumwandlung von int in BinaryNumeral konvertiert.

  • Auch durch die Anweisung

    roman = binary;
    
    

    wird eine Konvertierung von BinaryNumeral in RomanNumeral durchgeführt. Da durch RomanNumeral eine implizite Konvertierung von BinaryNumeral definiert wird, ist keine Typumwandlung erforderlich.

Siehe auch

Microsoft führt eine Onlineumfrage durch, um Ihre Meinung zur MSDN-Website zu erfahren. Wenn Sie sich zur Teilnahme entscheiden, wird Ihnen die Onlineumfrage angezeigt, sobald Sie die MSDN-Website verlassen.

Möchten Sie an der Umfrage teilnehmen?
Anzeigen:
© 2014 Microsoft