Kullanıcı tanımlı açık ve örtük dönüştürme işleçleri

Kullanıcı tanımlı bir tür, veya başka bir türden özel örtük veya açık bir dönüştürme tanımlayabilir. Örtük dönüştürmelerin çağrılması için özel söz dizimi gerekmez ve atamalar ve yöntem çağrıları gibi çeşitli durumlarda gerçekleşebilir. Önceden tanımlanmış C# örtük dönüştürmeleri her zaman başarılı olur ve hiçbir zaman özel durum oluşturmaz. Kullanıcı tanımlı örtük dönüştürmeler de bu şekilde davranmalıdır. Özel dönüştürme bir özel durum oluşturabiliyorsa veya bilgileri kaybediyorsa, bunu açık dönüştürme olarak tanımlayın.

Kullanıcı tanımlı dönüştürmeler, ve işleçleri tarafından dikkate alınmaz. Kullanıcı tanımlı açık dönüştürmeyi çağırmak için bir atama ifadesi kullanın.

operator Sırasıyla örtük veya açık bir dönüştürme tanımlamak için ve implicit veya explicit anahtar sözcüklerini kullanın. Dönüştürmeyi tanımlayan tür, bir kaynak türü veya bu dönüştürmenin hedef türü olmalıdır. İki kullanıcı tanımlı tür arasında dönüştürme, iki türden birinde tanımlanabilir.

Aşağıdaki örnekte örtük ve açık dönüştürmenin nasıl tanımlanacağı gösterilmektedir:

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

C# 11 ile başlayarak, işaretli açık dönüştürme işleçleri tanımlayabilirsiniz. Daha fazla bilgi için Aritmetik işleçler makalesinin Kullanıcı tanımlı işaretli işleçler bölümüne bakın.

Önceden tanımlanmış bir C# işlecini operator aşırı yüklemek için anahtar sözcüğünü de kullanırsınız. Daha fazla bilgi için bkz . İşleç aşırı yüklemesi.

C# dili belirtimi

Daha fazla bilgi için C# dil belirtiminin aşağıdaki bölümlerine bakın:

Ayrıca bkz.