Zdefiniowane przez użytkownika jawne i niejawne operatory konwersji

Typ zdefiniowany przez użytkownika może definiować niestandardową niejawną lub jawną konwersję z lub na inny typ. Konwersje niejawne nie wymagają wywoływania specjalnej składni i mogą wystąpić w różnych sytuacjach, na przykład w wywołaniach przypisań i metod. Wstępnie zdefiniowane konwersje niejawne języka C# zawsze kończą się powodzeniem i nigdy nie zgłaszają wyjątku. Konwersje niejawne zdefiniowane przez użytkownika również powinny zachowywać się w ten sposób. Jeśli konwersja niestandardowa może zgłosić wyjątek lub utracić informacje, zdefiniuj ją jako jawną konwersję.

Konwersje zdefiniowane przez użytkownika nie są brane pod uwagę przez operatory ijako operatory. Użyj wyrażenia rzutowania, aby wywołać jawną konwersję zdefiniowaną przez użytkownika.

operator Użyj słów kluczowych i , implicitexplicit aby zdefiniować odpowiednio niejawną lub jawną konwersję. Typ definiujący konwersję musi być typem źródłowym lub typem docelowym tej konwersji. Konwersję między dwoma typami zdefiniowanymi przez użytkownika można zdefiniować w jednym z dwóch typów.

W poniższym przykładzie pokazano, jak zdefiniować niejawną i jawną konwersję:

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
    }
}

Począwszy od języka C# 11, można zdefiniować zaznaczone jawne operatory konwersji. Aby uzyskać więcej informacji, zobacz sekcję Operatory zaznaczone przez użytkownika w artykule Operatory arytmetyczne.

Słowo kluczowe służy operator również do przeciążenia wstępnie zdefiniowanego operatora języka C#. Aby uzyskać więcej informacji, zobacz Przeciążenie operatora.

specyfikacja języka C#

Aby uzyskać więcej informacji, zobacz następujące sekcje specyfikacji języka C#:

Zobacz też