Pergunta

Recentemente, encontrei este código:

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

O que static implicit operator significa?

Foi útil?

Solução

Isto é um Operador de conversão. Isso significa que você pode escrever este código:

XmlBase myBase = new XmlBase();
XElement myElement = myBase;

E o compilador não reclamará! Em tempo de execução, o operador de conversão será executado - passando myBase como argumento, e retornando um válido XElement como resultado.

É uma maneira de você como desenvolvedor dizer ao compilador:

"Embora eles pareçam dois tipos totalmente não relacionados, há realmente uma maneira de converter de um para o outro; apenas deixe -me lidar com a lógica de como fazê -lo".

Outras dicas

Um operador tão implícito significa que você pode converter XmlBase para XElement implicitamente.

XmlBase xmlBase = WhatEverGetTheXmlBase();
XElement xelement = xmlBase;   
//no explicit convert here like: XElement xelement = (XElement)xmlBase;

It's an implicit conversion operator (as opposed to an Explicit operator, which requires the (type) conversion syntax)

Outro uso interessante é (o que a unidade fez para verificar se um objeto (e, portanto, uma instância de monobehavior) é nulo):

public static implicit operator bool (CustomClass c)
{
    if (c == null) return false;
    else return true;
}

Dessa forma, você pode fazer algo assim:

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, o uso mais notório pode ser usá -lo para converter uma de suas classes em outra de suas classes. Mas usá -los com tipos básicos também vale uma consideração ... e eu vejo isso mencionado raramente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top