Kullanıcı tanımlı dönüştürme işleçleri (C# başvuru)User-defined conversion operators (C# reference)

Kullanıcı tanımlı bir tür, ya da başka bir türe özel örtük veya açık bir dönüştürme tanımlayabilir.A user-defined type can define a custom implicit or explicit conversion from or to another type.

Örtük dönüştürmeler özel sözdiziminin çağrılmasını gerektirmez ve örneğin atamalar ve Yöntemler çağırmaları gibi çeşitli durumlarda gerçekleşebilir.Implicit conversions don't require special syntax to be invoked and can occur in a variety of situations, for example, in assignments and methods invocations. Önceden C# tanımlanmış örtük dönüştürmeler her zaman başarılı olur ve hiçbir zaman özel durum oluşturmaz veya bilgi kaybeder.Predefined C# implicit conversions always succeed and never throw an exception or lose information. Kullanıcı tanımlı örtük dönüştürmeler de bu şekilde davranmalıdır.User-defined implicit conversions should behave in that way as well. Özel bir dönüştürme özel durum oluşturabilir veya bilgi kaybedebilir, onu açık bir dönüştürme olarak tanımlayın.If a custom conversion can throw an exception or lose information, define it as an explicit conversion.

Kullanıcı tanımlı dönüştürmeler, ve gibi işleçler tarafından değerlendirilmez .User-defined conversions are not considered by the is and as operators. Kullanıcı tanımlı bir açık dönüştürme çağırmak için cast işlecini () kullanın.Use the cast operator () to invoke a user-defined explicit conversion.

Sırasıyla örtük veya implicit açık explicit bir dönüştürme tanımlamak için veveyaanahtarsözcüklerinikullanın.operatorUse the operator and implicit or explicit keywords to define an implicit or explicit conversion, respectively. Bir dönüştürmeyi tanımlayan tür bir kaynak türü ya da bu dönüştürmenin hedef türü olmalıdır.The type that defines a conversion must be either a source type or a target type of that conversion. Kullanıcı tanımlı iki tür arasında dönüştürme iki türden birinde tanımlanabilir.A conversion between two user-defined types can be defined in either of the two types.

Aşağıdaki örnek, örtük ve açık bir dönüştürmenin nasıl tanımlanacağını göstermektedir:The following example demonstrates how to define an implicit and explicit conversion:

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

Ayrıca, operator önceden tanımlanmış C# bir işleci aşırı yüklemek için anahtar sözcüğünü de kullanabilirsiniz.You also use the operator keyword to overload a predefined C# operator. Daha fazla bilgi için bkz. operatör aşırı yüklemesi.For more information, see Operator overloading.

C# dili belirtimiC# language specification

Daha fazla bilgi için, C# dil belirtimininaşağıdaki bölümlerine bakın:For more information, see the following sections of the C# language specification:

Ayrıca bkz.See also