Markieren Sie das Kontrollkästchen Englisch, um die englische Version dieses Artikels anzuzeigen. Sie können den englischen Text auch in einem Popup-Fenster einblenden, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch
Es wird empfohlen, Visual Studio 2017 zu verwenden
Diese Dokumentation wurde archiviert und wird nicht länger gepflegt.

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.


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 to string is not 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 to string is not 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);

        // Keep the console window open in debug mode.
        System.Console.WriteLine("Press any key to exit.");
        System.Console.ReadKey();
    }
}
/* Output:
    10
    Conversion not yet implemented
*/


  • 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.

Anzeigen: