operatore implicita statico
-
28-09-2019 - |
Domanda
Recentemente ho trovato questo codice:
public static implicit operator XElement(XmlBase xmlBase)
{
return xmlBase.Xml;
}
Cosa static implicit operator
media?
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.