Domanda

Recentemente ho trovato questo codice:

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

Cosa static implicit operator media?

È stato utile?

Soluzione

Questa è una operatore di conversione . Ciò significa che è possibile scrivere questo codice:

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

E il compilatore non si lamentano! In fase di esecuzione, l'operatore di conversione sarà eseguita - passando myBase nel come argomento, e restituisce un XElement valida come risultato

.

E 'un modo per voi come uno sviluppatore per dire al compilatore:

  

"anche se questi sguardo come due tipi totalmente indipendenti, v'è in realtà un modo per convertire da una all'altra;. Lasciami gestire la logica di come farlo"

Altri suggerimenti

Una tale implicita mezzi operatori è possibile convertire XmlBase a XElement implicitamente.

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

E 'un operatore di conversione implicita (in contrapposizione ad un operatore esplicito, che richiede la sintassi conversione (type))

Un altro utilizzo interessante è (che Unity fatto per verificare se un oggetto (e pertanto un caso di MonoBehavior) è nullo):

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

In questo modo si può fare qualcosa di simile:

void Method ()
{
    CustomClass c1 = null;
    CustomClass c2 = new CustomClass ();

    bool b1 = c1; // is false
    bool b2 = c2; // is true

    if (!c1 && c2)
    {
        // Do stuff
    }
}

Ovviamente l'utilizzo più noto potrebbe utilizzare per convertire una delle classi in un'altra delle classi. Ma il loro utilizzo con i tipi di base è una considerazione vale la pena così ... e lo vedo molto raramente menzionato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top