Aracılığıyla paylaş


Nasıl yapılır: kullanıcı tanımlı dönüştürme (C# Programlama Kılavuzu) yapılar arasında gerçekleştir

Bu örnek iki yapý tanýmlar RomanNumeral ve BinaryNumeral, aralarında dönüşümleri gösterir.

Örnek

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

Güçlü Programlama

  • Önceki örnekte, deyimi:

    binary = (BinaryNumeral)(int)roman;
    

    dönüştürme işlemi gerçekleştiren bir RomanNumeral için bir BinaryNumeral. Hiçbir doğrudan dönüştürme işlemi olduğundan RomanNumeral için BinaryNumeral, bir cast dönüştürmek için kullanılan bir RomanNumeral için bir intve dönüştürmek için başka bir oyuncu bir int için bir BinaryNumeral.

  • Ayrıca deyimi

    roman = binary;
    

    dönüştürme işlemi gerçekleştiren bir BinaryNumeral için bir RomanNumeral. Çünkü RomanNumeral bir örtük dönüştürme işlemi tanımlar BinaryNumeral, Dönüþtürme gereklidir.

Ayrıca bkz.

Başvuru

Dönüştürme işleçleri (C# Programlama Kılavuzu)

Kavramlar

C# Programlama Kılavuzu

Diğer Kaynaklar

C# Başvurusu