Pregunta

Hace poco se encontró este código:

 public static implicit operator XElement(XmlBase xmlBase)
 {
     return xmlBase.Xml;
 }

¿Qué significa static implicit operator?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top