Jawaban:
Ini adalah operator konversi . Ini berarti Anda dapat menulis kode ini:
XmlBase myBase = new XmlBase();
XElement myElement = myBase;
Dan kompiler tidak akan mengeluh! Saat runtime, operator konversi akan dieksekusi - lewat myBase
sebagai argumen, dan mengembalikan yang valid XElement
sebagai hasilnya.
Ini cara Anda sebagai pengembang untuk memberi tahu kompiler:
"Meskipun ini terlihat seperti dua jenis yang sama sekali tidak berhubungan, sebenarnya ada cara untuk mengkonversi dari satu ke yang lain; biarkan aku menangani logika bagaimana melakukannya."
Seperti sarana Operator implisit Anda dapat mengkonversi XmlBase
ke XElement
implisit.
XmlBase xmlBase = WhatEverGetTheXmlBase();
XElement xelement = xmlBase;
//no explicit convert here like: XElement xelement = (XElement)xmlBase;
XElement xelement = (XElement)xmlBase;
Dalam pertanyaannya static
, apa yang harus statis? Tidak bisakah itu non-statis, jadi itu bisa dipakai?
Penggunaan lain yang menarik adalah (yang dilakukan Unity untuk memeriksa apakah suatu objek (dan karenanya turunan dari MonoBehavior) adalah nol):
public static implicit operator bool (CustomClass c)
{
return c != null;
}
Perhatikan bahwa kode harus berada di dalam kelas (CustomClass dalam kasus ini). Dengan begitu Anda dapat melakukan sesuatu seperti ini:
void Method ()
{
CustomClass c1 = null;
CustomClass c2 = new CustomClass ();
bool b1 = c1; // is false
bool b2 = c2; // is true
if (!c1 && c2)
{
// Do stuff
}
}
Jelas penggunaan yang paling terkenal mungkin menggunakannya untuk mengkonversi salah satu kelas Anda ke kelas Anda yang lain. Tetapi menggunakannya dengan tipe dasar juga patut dipertimbangkan ... dan saya melihatnya jarang disebutkan.
static implicit operator bool
metode harus dideklarasikan di dalam CustomClass
. Saya telah membuat DotNetFiddle untuk tujuan demo.
Ini adalah operator konversi implisit (sebagai lawan dari operator Eksplisit, yang memerlukan (type)
sintaksis konversi)