Ответы:
Это оператор преобразования . Это означает, что вы можете написать этот код:
XmlBase myBase = new XmlBase();
XElement myElement = myBase;
И компилятор не будет жаловаться! Во время выполнения будет выполнен оператор преобразования - передав myBase
в качестве аргумента и вернув в XElement
качестве результата действительное значение.
Это способ для вас, как для разработчика, сказать компилятору:
«Несмотря на то, что они выглядят как два совершенно не связанных между собой типа, на самом деле существует способ преобразования из одного в другой; просто позвольте мне разобраться с логикой того, как это сделать».
Такой неявный оператор означает, что вы можете конвертировать XmlBase
в XElement
неявно.
XmlBase xmlBase = WhatEverGetTheXmlBase();
XElement xelement = xmlBase;
//no explicit convert here like: XElement xelement = (XElement)xmlBase;
XElement xelement = (XElement)xmlBase;
В вопросе говорится static
, что это должно быть статичным? Разве это не может быть нестатичным, поэтому его можно создать?
Другое интересное использование (которое Unity сделал, чтобы проверить, является ли объект (и, следовательно, экземпляр MonoBehavior) нулевым):
public static implicit operator bool (CustomClass c)
{
return c != null;
}
Обратите внимание, что код должен быть внутри класса (в данном случае CustomClass). Таким образом, вы можете сделать что-то вроде этого:
void Method ()
{
CustomClass c1 = null;
CustomClass c2 = new CustomClass ();
bool b1 = c1; // is false
bool b2 = c2; // is true
if (!c1 && c2)
{
// Do stuff
}
}
Очевидно, что самым известным использованием может быть его использование для преобразования одного из ваших классов в другой из ваших классов. Но использование их с базовыми типами также заслуживает рассмотрения ... и я вижу, что оно упоминается довольно редко.
static implicit operator bool
метод должен быть объявлен внутриCustomClass
. Я создал DotNetFiddle для этого в демонстрационных целях.
Это неявный оператор преобразования (в отличие от явного оператора, который требует (type)
синтаксиса преобразования)