Explicitní a implicitní operátory převodu definované uživatelem

Uživatelem definovaný typ může definovat vlastní implicitní nebo explicitní převod z nebo na jiný typ. Implicitní převody nevyžadují vyvolání speciální syntaxe a mohou nastat v různých situacích, například při vyvolání přiřazení a metod. Předdefinované implicitní převody jazyka C# vždy proběhnou úspěšně a nikdy nevyvolají výjimku. Implicitní převody definované uživatelem by se měly chovat i tímto způsobem. Pokud může vlastní převod vyvolat výjimku nebo ztratit informace, definujte ji jako explicitní převod.

Uživatelem definované převody se nepovažují za operátory a operátory. K vyvolání explicitního převodu definovaného uživatelem použijte výraz přetypování.

operator Pomocí těchto klíčových implicitexplicit slov můžete definovat implicitní nebo explicitní převod. Typ, který definuje převod, musí být buď zdrojovým typem, nebo cílovým typem tohoto převodu. Převod mezi dvěma typy definovanými uživatelem lze definovat v některém z těchto dvou typů.

Následující příklad ukazuje, jak definovat implicitní a explicitní převod:

using System;

public readonly struct Digit
{
    private readonly byte digit;

    public Digit(byte digit)
    {
        if (digit > 9)
        {
            throw new ArgumentOutOfRangeException(nameof(digit), "Digit cannot be greater than nine.");
        }
        this.digit = digit;
    }

    public static implicit operator byte(Digit d) => d.digit;
    public static explicit operator Digit(byte b) => new Digit(b);

    public override string ToString() => $"{digit}";
}

public static class UserDefinedConversions
{
    public static void Main()
    {
        var d = new Digit(7);

        byte number = d;
        Console.WriteLine(number);  // output: 7

        Digit digit = (Digit)number;
        Console.WriteLine(digit);  // output: 7
    }
}

Počínaje jazykem C# 11 můžete definovat kontrolované explicitní převodní operátory. Další informace naleznete v části Uživatelem definované kontrolované operátory článku Aritmetické operátory.

Pomocí klíčového operator slova můžete také přetížit předdefinovaný operátor jazyka C#. Další informace naleznete v tématu Přetížení operátoru.

specifikace jazyka C#

Další informace najdete v následujících částech specifikace jazyka C#:

Viz také