poco me encontré con este código:estático operador implícita
public static implicit operator XElement(XmlBase xmlBase)
{
return xmlBase.Xml;
}
¿Qué significa static implicit operator
?
poco me encontré con este código:estático operador implícita
public static implicit operator XElement(XmlBase xmlBase)
{
return xmlBase.Xml;
}
¿Qué significa static implicit operator
?
Este es un conversion operator. Significa que puede escribir este código:
XmlBase myBase = new XmlBase();
XElement myElement = myBase;
¡Y el compilador no se quejará! En tiempo de ejecución, se ejecutará el operador de conversión, pasando myBase
como el argumento, y devolviendo un XElement
válido como resultado.
Es una manera para que usted como desarrollador para decirle al compilador:
"a pesar de que éstas parecen dos tipos totalmente sin relación, no es en realidad una forma de convertir de una a la otra; sólo me deje manejar la lógica de cómo hacerlo ".
Tal operador implícito significa que puede convertir implícitamente XmlBase
en XElement
.
XmlBase xmlBase = WhatEverGetTheXmlBase();
XElement xelement = xmlBase;
//no explicit convert here like: XElement xelement = (XElement)xmlBase;
¿Alguien me puede decir lo que está mal en mi respuesta? –
¿Puede esta conversión explícita funcionar de todos modos? 'XElement xelement = (XElement) xmlBase;' En la pregunta dice 'static', ¿qué tiene que ser estático? ¿No puede ser no estático, por lo que se puede instanciar? – aspiring
Es un operador conversión implícita (en contraposición a un operador explícita, lo que requiere la sintaxis (type)
conversión)
+1. Yo agregaría que si bien hay buenos usos ocasionales de la conversión implícita, también puede causar errores extraños/sorprendentes y puede confundir a un usuario API (humano). A modo de ejemplo, hay muy pocos usos de conversiones implícitas en el BCL. ¡Úselo con discreción! –