Udostępnij za pomocą


Zdefiniowane przez użytkownika jawne i niejawne operatory konwersji

Typ zdefiniowany przez użytkownika może definiować niestandardową niejawną lub jawną konwersję z lub do innego typu, pod warunkiem że konwersja standardowa nie istnieje między tymi samymi dwoma typami. 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ę.

Element jest i jako operatory nie uwzględniają konwersji zdefiniowanych przez użytkownika. 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
    }
}

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 także