Respuestas:
Este es un operador de conversión . Significa que puedes escribir este código:
XmlBase myBase = new XmlBase();
XElement myElement = myBase;
¡Y el compilador no se quejará! En el tiempo de ejecución, se ejecutará el operador de conversión: pasar myBase
como argumento y devolver un resultado válido XElement
como resultado.
Como desarrollador, es una forma de decirle al compilador:
"A pesar de que estos parecen dos tipos totalmente ajenos, en realidad hay una forma de convertir de uno a otro; solo déjenme manejar la lógica de cómo hacerlo".
Tal implícitos medios de operador que puede convertir XmlBase
a la XElement
forma implícita.
XmlBase xmlBase = WhatEverGetTheXmlBase();
XElement xelement = xmlBase;
//no explicit convert here like: XElement xelement = (XElement)xmlBase;
XElement xelement = (XElement)xmlBase;
En la pregunta que dice static
, ¿qué tiene que ser estático? ¿No puede ser no estático, por lo que puede ser instanciado?
Otro uso interesante es (que Unity hizo para verificar si un objeto (y, por lo tanto, una instancia de MonoBehavior) es nulo):
public static implicit operator bool (CustomClass c)
{
return c != null;
}
Tenga en cuenta que el código debe estar dentro de la clase (CustomClass en este caso). De esa manera puedes 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
}
}
Obviamente, el uso más notorio podría ser usarlo para convertir una de sus clases en otra de sus clases. Pero también vale la pena considerar su uso con tipos básicos ... y veo que se menciona muy raramente.
static implicit operator bool
método debe ser declarado dentro de la CustomClass
. He creado un DotNetFiddle para ello con fines de demostración.
Es un operador de conversión implícito (a diferencia de un operador explícito, que requiere la (type)
sintaxis de conversión)