Sdílet prostřednictvím


Použití operátorů převodu (Průvodce programováním v C#)

Je možné použít operátory převodů implicit, které jsou jednodušší, nebo operátory převodů explicit, které jasně označují každému, kdo čte kód, že převádíte typ.Toto téma ukazuje oba typy operátoru převodu.

[!POZNÁMKA]

Informace o převodech jednoduchého typu naleznete v tématu Postupy: Převedení řetězce na číslo (Průvodce programováním v C#), Postupy: Převedení pole bajtů na typ int (Průvodce programováním v C#), Postupy: Převod mezi hexadecimálními řetězci a číselnými typy (Průvodce programováním v C#) nebo Convert.

Příklad

Toto je příklad explicitního operátoru převodu.Tento operátor převede typ Byte na hodnotu s názvem Digit.Vzhledem k tomu, že ne všechny bajty mohou být převedeny na číslice, je převod explicitní a znamená, že musí být použito přetypování, jak je znázorněno v metodě Main.

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.

Tento příklad ukazuje operátor implicitního převodu definováním operátoru převodu, který vrátí zpět, co předchozí příklad udělal: převede z hodnotové třídy s názvem Digit na integrál typu Byte.Protože libovolná číslice může být převedena na Byte, není potřeba přinutit uživatele k explicitnímu převodu.

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.

Viz také

Referenční dokumentace

Operátory převodu (Průvodce programováním v C#)

is (Referenční dokumentace jazyka C#)

Koncepty

Průvodce programováním v C#

Další zdroje

Referenční dokumentace jazyka C#