Bagikan melalui


Operator konversi eksplisit dan implisit yang ditentukan pengguna

Jenis yang ditentukan pengguna dapat menentukan konversi implisit atau eksplisit kustom dari atau ke jenis lain, asalkan konversi standar tidak ada di antara dua jenis yang sama. 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 melemparkan pengecualian. Konversi implisit yang ditentukan pengguna juga harus berprilaku seperti itu. Jika konversi kustom dapat melemparkan pengecualian atau kehilangan informasi, tentukan sebagai konversi eksplisit.

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

operator Gunakan kata kunci 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 dua jenis.

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

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 operator kata kunci untuk membebani operator C# yang telah ditentukan sebelumnya. Untuk informasi selengkapnya, lihat Kelebihan beban operator.

Spesifikasi bahasa C#

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

Lihat juga