Risposte:
Questo è un operatore di conversione . Significa che puoi scrivere questo codice:
XmlBase myBase = new XmlBase();
XElement myElement = myBase;
E il compilatore non si lamenterà! In fase di esecuzione, verrà eseguito l'operatore di conversione, passando myBase
come argomento e restituendo un valore valido XElement
come risultato.
È un modo per te come sviluppatore di dire al compilatore:
"anche se questi sembrano due tipi totalmente indipendenti, in realtà esiste un modo per convertire da uno all'altro; lasciami solo gestire la logica per come farlo."
Un operatore così implicito significa che puoi convertirlo XmlBase
in modo XElement
implicito.
XmlBase xmlBase = WhatEverGetTheXmlBase();
XElement xelement = xmlBase;
//no explicit convert here like: XElement xelement = (XElement)xmlBase;
XElement xelement = (XElement)xmlBase;
Nella domanda dice static
, che cosa deve essere statico? Non può essere non statico, quindi può essere istanziato?
Un altro utilizzo interessante è (che Unity ha fatto per verificare se un oggetto (e quindi un'istanza di MonoBehavior) è null):
public static implicit operator bool (CustomClass c)
{
return c != null;
}
Si noti che il codice deve essere all'interno della classe (CustomClass in questo caso). In questo modo puoi fare qualcosa del genere:
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'uso più noto potrebbe essere usarlo per convertire una delle tue classi in un'altra delle tue classi. Ma vale anche la pena usarli con tipi di base ... e lo vedo menzionato abbastanza raramente.
static implicit operator bool
metodo deve essere dichiarato all'interno del CustomClass
. Ho creato un DotNetFiddle per questo a scopo dimostrativo.
È un operatore di conversione implicito (al contrario di un operatore esplicito, che richiede la (type)
sintassi di conversione)