Ich habe kürzlich diesen Code gefunden:
public static implicit operator XElement(XmlBase xmlBase)
{
return xmlBase.Xml;
}
Was bedeutet static implicit operator
?
Dies ist ein -Konvertierungsoperator . Es 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, wobei myBase
als Argument übergeben wird und eine gültige XElement
als Ergebnis zurückgegeben wird.
Es ist eine Möglichkeit für Sie als Entwickler, dem Compiler zu sagen:
"Auch wenn diese wie zwei völlig voneinander unabhängige Typen aussehen, gibt es tatsächlich eine Möglichkeit, von einem auf den anderen umzuwandeln;
Ein solcher impliziter Operator bedeutet, dass Sie XmlBase
implizit in XElement
konvertieren können.
XmlBase xmlBase = WhatEverGetTheXmlBase();
XElement xelement = xmlBase;
//no explicit convert here like: XElement xelement = (XElement)xmlBase;
Hierbei handelt es sich um einen impliziten Konvertierungsoperator (im Gegensatz zu einem expliziten Operator, für den die (type)
-Konvertierungssyntax erforderlich ist).
Eine andere interessante Verwendung ist (die Unity tat, um zu prüfen, ob ein Objekt (und daher eine Instanz von MonoBehavior) null ist):
public static implicit operator bool (CustomClass c)
{
if (c == null) return false;
else return true;
}
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
}
}
Es ist offensichtlich, dass der bekannteste Einsatz darin besteht, eine Ihrer Klassen in eine andere Ihrer Klassen zu konvertieren. Aber es ist auch eine Überlegung wert, sie mit Grundtypen zu verwenden ... und ich sehe es ziemlich selten.