Anda dapat mendeklarasikan operator konversi di kelas Anda menggunakan kata kunci explicit
atau implicit
.
Sebagai pedoman umum, Anda hanya boleh menyediakan implicit
operator konversi jika konversi tidak mungkin gagal. Gunakan explicit
operator konversi saat konversi mungkin gagal.
public class MyClass
{
private byte[] _bytes;
// change explicit to implicit depending on what you need
public static explicit operator MyClass(byte[] b)
{
MyClass m = new MyClass();
m._bytes = b;
return m;
}
// change explicit to implicit depending on what you need
public static explicit operator byte[](MyClass m)
{
return m._bytes;
}
}
Menggunakan explicit
berarti bahwa pengguna kelas Anda perlu melakukan konversi eksplisit:
byte[] foo = new byte[] { 1, 2, 3, 4, 5 };
// explicitly convert foo into an instance of MyClass...
MyClass bar = (MyClass)foo;
// explicitly convert bar into a new byte[] array...
byte[] baz = (byte[])bar;
Menggunakan implicit
berarti bahwa pengguna kelas Anda tidak perlu melakukan konversi eksplisit, semuanya terjadi secara transparan:
byte[] foo = new byte[] { 1, 2, 3, 4, 5 };
// imlpicitly convert foo into an instance of MyClass...
MyClass bar = foo;
// implicitly convert bar into a new byte[] array...
byte[] baz = bar;
Untuk dukungan cast kustom, Anda perlu menyediakan operator cast (eksplisit atau implisit). Contoh kelas EncodedString berikut adalah implementasi sederhana dari string dengan pengkodean khusus (mungkin berguna jika Anda harus memproses string yang sangat besar dan mengalami masalah konsumsi memori karena. String bersih adalah Unicode - setiap karakter membutuhkan 2 byte memori - dan EncodedString dapat mengambil 1 byte per karakter).
EncodedString dapat diubah menjadi byte [] dan ke System.String. Komentar dalam kode menjelaskan beberapa hal dan juga menjelaskan contoh ketika konversi implisit bisa berbahaya.
Biasanya Anda memerlukan alasan yang sangat bagus untuk mendeklarasikan setiap operator konversi karena.
Bacaan lebih lanjut tersedia di MSDN .
sumber