operador implícita estática
-
28-09-2019 - |
Pregunta
Hace poco se encontró este código:
public static implicit operator XElement(XmlBase xmlBase)
{
return xmlBase.Xml;
}
¿Qué significa static implicit operator
?
Solución
Este es un operador de conversión . Esto significa que se puede escribir este código:
XmlBase myBase = new XmlBase();
XElement myElement = myBase;
Y el compilador no se quejará! En tiempo de ejecución, el operador de conversión se establezca - pasando myBase
en que el argumento, y devolviendo una XElement
válida 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;. Acaba de dejar que me ocupe de la lógica de cómo hacerlo"
Otros consejos
Este tipo de un medio de operadores implícitos que puede convertir a XmlBase
XElement
implícita.
XmlBase xmlBase = WhatEverGetTheXmlBase();
XElement xelement = xmlBase;
//no explicit convert here like: XElement xelement = (XElement)xmlBase;
Es un operador conversión implícita (en contraposición a un operador explícita, lo que requiere la sintaxis de conversión (type)
)
Otro uso interesante es (que Unidad hizo para comprobar si un objeto (y por lo tanto una instancia de MonoBehavior) es nulo):
public static implicit operator bool (CustomClass c)
{
if (c == null) return false;
else return true;
}
De esa manera usted puede hacer algo como esto:
void Method ()
{
CustomClass c1 = null;
CustomClass c2 = new CustomClass ();
bool b1 = c1; // is false
bool b2 = c2; // is true
if (!c1 && c2)
{
// Do stuff
}
}
Es evidente que el uso más notorio podría estar utilizando para convertir una de sus clases a otro de sus clases. Pero su uso con tipos básicos es una consideración vale así ... y lo veo muy rara vez se menciona.