Yanıtlar:
Bu bir dönüşüm operatörü . Bu, bu kodu yazabileceğiniz anlamına gelir:
XmlBase myBase = new XmlBase();
XElement myElement = myBase;
Ve derleyici şikayet etmeyecek! Çalışma zamanında, dönüştürme işleci yürütülür - myBase
bağımsız değişken olarak iletilir ve XElement
sonuç olarak geçerli bir değer döndürülür .
Bir geliştirici olarak derleyiciye söylemenin bir yolu:
"bunlar tamamen birbiriyle alakasız iki tip gibi görünse de, aslında birinden diğerine dönüştürmenin bir yolu var; sadece nasıl yapılacağına dair mantığı idare edeyim."
Böyle bir örtük operatör XmlBase
, XElement
dolaylı olarak dönüştürebileceğiniz anlamına gelir .
XmlBase xmlBase = WhatEverGetTheXmlBase();
XElement xelement = xmlBase;
//no explicit convert here like: XElement xelement = (XElement)xmlBase;
XElement xelement = (XElement)xmlBase;
Yazdığı soruda static
, statik olması gereken ne? Statik olamaz mı, bu yüzden somutlaştırılabilir mi?
Bir başka ilginç kullanım (Unity'nin bir nesnenin (ve bu nedenle MonoBehavior örneğinin) boş olup olmadığını kontrol etmek için yaptığı):
public static implicit operator bool (CustomClass c)
{
return c != null;
}
Kodun sınıf içinde olması gerektiğini unutmayın (bu durumda CustomClass). Bu şekilde böyle bir şey yapabilirsiniz:
void Method ()
{
CustomClass c1 = null;
CustomClass c2 = new CustomClass ();
bool b1 = c1; // is false
bool b2 = c2; // is true
if (!c1 && c2)
{
// Do stuff
}
}
Açıkçası en kötü şöhretli kullanım, sınıflarınızdan birini sınıflarınızdan birine dönüştürmek için kullanıyor olabilir. Ancak bunları temel tiplerle kullanmak da dikkate değerdir ...
static implicit operator bool
yöntem beyan edilmesi gerekir içerideCustomClass
. Demo amaçlı bir DotNetFiddle oluşturdum .
Örtük bir dönüşüm operatörü ( (type)
dönüşüm sözdizimini gerektiren bir Açık operatörün aksine )