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.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin