Antworten:
Dies ist ein Konvertierungsoperator . Dies bedeutet, dass Sie diesen Code schreiben können:
XmlBase myBase = new XmlBase();
XElement myElement = myBase;
Und der Compiler wird sich nicht beschweren! Zur Laufzeit wird der Konvertierungsoperator ausgeführt - myBase
als Argument übergeben und XElement
als Ergebnis eine gültige zurückgegeben .
Auf diese Weise können Sie als Entwickler dem Compiler Folgendes mitteilen:
"Auch wenn diese Typen wie zwei völlig unabhängige Typen aussehen, gibt es tatsächlich eine Möglichkeit, von einem zum anderen zu konvertieren. Lassen Sie mich einfach die Logik dafür handhaben."
Eine solche implizite Operator Mittel können Sie konvertieren XmlBase
zu XElement
implizit.
XmlBase xmlBase = WhatEverGetTheXmlBase();
XElement xelement = xmlBase;
//no explicit convert here like: XElement xelement = (XElement)xmlBase;
XElement xelement = (XElement)xmlBase;
In der Frage heißt es static
, was muss es statisch sein? Kann es nicht nicht statisch sein, damit es instanziiert werden kann?
Eine weitere interessante Verwendung ist (die Unity durchgeführt hat, um zu überprüfen, ob ein Objekt (und damit eine Instanz von MonoBehavior) null ist):
public static implicit operator bool (CustomClass c)
{
return c != null;
}
Beachten Sie, dass sich der Code innerhalb der Klasse befinden muss (in diesem Fall CustomClass). Auf diese Weise können Sie so etwas tun:
void Method ()
{
CustomClass c1 = null;
CustomClass c2 = new CustomClass ();
bool b1 = c1; // is false
bool b2 = c2; // is true
if (!c1 && c2)
{
// Do stuff
}
}
Offensichtlich könnte die berüchtigtste Verwendung darin bestehen, eine Ihrer Klassen in eine andere Ihrer Klassen umzuwandeln. Aber es lohnt sich auch, sie mit Grundtypen zu verwenden ... und ich sehe, dass dies ziemlich selten erwähnt wird.
static implicit operator bool
Methode muss innerhalb der deklariert werden CustomClass
. Ich habe eine DotNetFiddle dafür für Demozwecke erstellt.
Es ist ein impliziter Konvertierungsoperator (im Gegensatz zu einem expliziten Operator, für den die (type)
Konvertierungssyntax erforderlich ist ).