Operator konversi eksplisit dan implisit yang ditentukan pengguna

Jenis yang ditentukan pengguna dapat menentukan konversi implisit atau eksplisit kustom dari atau ke jenis lain. Konversi implisit tidak memerlukan sintaks khusus untuk dipanggil dan dapat terjadi dalam berbagai situasi, misalnya, dalam penugasan dan pemanggilan metode. Konversi implisit C# yang telah ditentukan sebelumnya selalu berhasil dan tidak pernah memberi pengecualian. Konversi implisit yang ditentukan pengguna juga harus berperilaku seperti itu. Jika konversi kustom dapat memberi pengecualian atau kehilangan informasi, tentukan sebagai konversi eksplisit.

Konversi yang ditentukan pengguna tidak dipertimbangkan oleh adalah dan sebagai operator. Gunakan ekspresi cast untuk memanggil konversi eksplisit yang ditentukan pengguna.

Gunakan kata kunci operator dan implicit atau explicit untuk menentukan konversi implisit atau eksplisit. Jenis yang menentukan konversi harus berupa jenis sumber atau jenis target konversi tersebut. Konversi antara dua jenis yang ditentukan pengguna dapat ditentukan di salah satu dari kedua jenis itu.

Contoh berikut menunjukkan cara menentukan konversi implisit dan eksplisit:

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

Dimulai dengan C# 11, Anda dapat menentukan operator konversi eksplisit yang diperiksa . Untuk informasi selengkapnya, lihat bagian Operator yang diperiksa yang ditentukan pengguna dari artikel Operator aritmatika.

Anda juga menggunakan kata kunci operator untuk membebani operator C# yang telah ditentukan sebelumnya. Untuk informasi selengkapnya, lihat Operator yang membebani.

Spesifikasi bahasa C#

Untuk informasi selengkapnya, lihat bagian berikut dari spesifikasi bahasa C#:

Lihat juga