Я недавно нашел этот код:
public static implicit operator XElement(XmlBase xmlBase)
{
return xmlBase.Xml;
}
Что static implicit operator
значит?
Я недавно нашел этот код:
public static implicit operator XElement(XmlBase xmlBase)
{
return xmlBase.Xml;
}
Что static implicit operator
значит?
Это оператор преобразования . Это означает, что вы можете написать этот код:
XmlBase myBase = new XmlBase();
XElement myElement = myBase;
И компилятор не будет жаловаться! Во время выполнения будет выполнен оператор преобразования - передав myBase
в качестве аргумента и вернув в XElement
качестве результата действительное значение.
Это способ для вас, как для разработчика, сказать компилятору:
«Несмотря на то, что они выглядят как два совершенно не связанных между собой типа, на самом деле существует способ преобразования из одного в другой; просто позвольте мне разобраться с логикой того, как это сделать».
Такой неявный оператор означает, что вы можете конвертировать
XmlBase
вXElement
неявно.источник
XElement xelement = (XElement)xmlBase;
В вопросе говоритсяstatic
, что это должно быть статичным? Разве это не может быть нестатичным, поэтому его можно создать?Другое интересное использование (которое Unity сделал, чтобы проверить, является ли объект (и, следовательно, экземпляр MonoBehavior) нулевым):
Обратите внимание, что код должен быть внутри класса (в данном случае CustomClass). Таким образом, вы можете сделать что-то вроде этого:
Очевидно, что самым известным использованием может быть его использование для преобразования одного из ваших классов в другой из ваших классов. Но использование их с базовыми типами также заслуживает рассмотрения ... и я вижу, что оно упоминается довольно редко.
источник
static implicit operator bool
метод должен быть объявлен внутриCustomClass
. Я создал DotNetFiddle для этого в демонстрационных целях.Это неявный оператор преобразования (в отличие от явного оператора, который требует
(type)
синтаксиса преобразования)источник