Kullanıcı tanımlı dönüştürme işleçleri (C# başvurusu)
Kullanıcı tanımlı tür, veya türünden veya başka bir türe özel bir örtülü veya açık dönüştürme tanımlayabilir.
Örtülü dönüştürmeler, çağrılacak özel söz dizimi gerektirmez ve atamalar ve yöntem çağrılarında gibi çeşitli durumlarda oluşabilir. Önceden tanımlanmış C# örtülü dönüştürmeleri her zaman başarılı olur ve hiçbir zaman özel durum oluşturur. Kullanıcı tanımlı örtülü dönüştürmeler de bu şekilde davranmalı. Özel bir dönüştürme bir özel durum oluşturabilir veya bilgileri kaybedebilirse, bunu açık bir dönüştürme olarak tanımlayın.
Kullanıcı tanımlı dönüştürmeler is ve işleçleri tarafından dikkate alınmaz. Kullanıcı tanımlı açık dönüştürmeyi çağırmak için bir tür dönüştürme ifadesi kullanın.
Sırasıyla operator implicit örtülü veya açık bir dönüştürme tanımlamak için explicit ve veya anahtar sözcüklerini kullanın. Dönüştürme tanımlayan tür, bir kaynak türü veya bu dönüştürmenin hedef türü olabilir. İki kullanıcı tanımlı tür arasındaki dönüştürme, iki türden herhangi biri içinde tanımlanabilir.
Aşağıdaki örnek, örtülü ve açık dönüştürmenin nasıl tanımlarını gösterir:
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
}
}
Önceden tanımlanmış bir operator C# işlecinin aşırı yüklenmesi için anahtar sözcüğünü de kullanabilirsiniz. Daha fazla bilgi için bkz. İşleç aşırı yüklemesi.
C# dili belirtimi
Daha fazla bilgi için C# dil belirtimlerinin aşağıdaki bölümlerine bakın: