it-swarm.com.de

Statischer impliziter Operator

Ich habe kürzlich diesen Code gefunden:

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

Was bedeutet static implicit operator?

118
Bart

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;

206
Rex M

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;
9
Danny Chen

Hierbei handelt es sich um einen impliziten Konvertierungsoperator (im Gegensatz zu einem expliziten Operator, für den die (type)-Konvertierungssyntax erforderlich ist).

4
Andrew Barber

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.

1
Battle