Gewusst wie: Implementieren von benutzerdefinierten Konvertierungen zwischen Strukturen (C#-Programmierhandbuch)How to: Implement User-Defined Conversions Between Structs (C# Programming Guide)

Dieses Beispiel definiert zwei Strukturen, RomanNumeral und BinaryNumeral, und zeigt Konvertierungen zwischen diesen.This example defines two structs, RomanNumeral and BinaryNumeral, and demonstrates conversions between them.

BeispielExample

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
*/

Stabile ProgrammierungRobust Programming

  • Im vorherigen Beispiel führt die AnweisungIn the previous example, the statement:

    binary = (BinaryNumeral)(int)roman;
    

    führt eine Konvertierung von RomanNumeral zu BinaryNumeral durch.performs a conversion from a RomanNumeral to a BinaryNumeral. Da es keine direkte Konvertierung von RomanNumeral zu BinaryNumeral gibt, wird eine Umwandlung für die Konvertierung von RomanNumeral zu int verwendet, und eine weitere Umwandlung zum Konvertieren von int zu BinaryNumeral.Because there is no direct conversion from RomanNumeral to BinaryNumeral, a cast is used to convert from a RomanNumeral to an int, and another cast to convert from an int to a BinaryNumeral.

  • Die AnweisungAlso the statement

    roman = binary;
    

    führt eine Konvertierung von BinaryNumeral zu RomanNumeral durch.performs a conversion from a BinaryNumeral to a RomanNumeral. Da RomanNumeral eine implizierte Konvertierung von BinaryNumeral definiert, ist keine Umwandlung erforderlich.Because RomanNumeral defines an implicit conversion from BinaryNumeral, no cast is required.

Siehe auchSee Also

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