Uživatelem definované operátory převodu (referenční dokumentace jazyka C#)

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# jsou vždy ú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 ho jako explicitní převod.

Uživatelem definované převody se nepovažují za operátory a operátory. Pomocí výrazu přetypování můžete vyvolat explicitní převod definovaný uživatelem.

operator Pomocí a nebo implicitexplicit klíčových slov definujte 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 uživatelem definovanými typy lze definovat v obou dvou typech.

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 najdete v části Operátory definované uživatelem v článku Aritmetické operátory .

Klíčové slovo také použijete operator k přetížení předdefinovaného operátoru jazyka C#. Další informace najdete 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é