Frage

Vor kurzem fand ich diesen Code ein:

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

Was bedeutet static implicit operator bedeuten?

War es hilfreich?

Lösung

Dies ist ein Konvertierungsoperator . Es bedeutet, dass Sie diesen Code schreiben können:

XmlBase myBase = new XmlBase();
XElement myElement = myBase;

Und der Compiler wird nicht beschweren! Zur Laufzeit wird der Umwandlungsoperator ausgeführt - vorbei myBase in als Argument, und eine gültige XElement als Folge der Rückkehr

.

Es ist ein Weg für Sie als Entwickler der Compiler zu sagen:

  

„obwohl diese aussehen wie zwei völlig unabhängige Arten, gibt es tatsächlich eine Art und Weise zu konvertieren von einem zum anderen,. Lassen Sie mich die Logik für handhaben, wie es geht“

Andere Tipps

Eine solche implizite Operator Mittel Sie implizit XmlBase zu XElement umwandeln kann.

XmlBase xmlBase = WhatEverGetTheXmlBase();
XElement xelement = xmlBase;   
//no explicit convert here like: XElement xelement = (XElement)xmlBase;

Es ist ein impliziter Umwandlungsoperator (im Gegensatz zu einem Explicit Operator gegenüber, die die Umwandlung (type) Syntax erfordert)

Eine weitere interessante Anwendung ist (die Einheit hat zu überprüfen, ob ein Objekt (und damit eine Instanz von MonoBehavior) ist null):

public static implicit operator bool (CustomClass c)
{
    if (c == null) return false;
    else return true;
}

So können Sie etwas tun können:

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 ist der berüchtigtsten Verwendung könnte es werden, mit einem Ihrer Klassen zu einem anderen Klassen zu konvertieren. Aber sie mit Grundtypen verwendet, ist eine Überlegung wert, wie gut ... und ich sehe es erwähnt ganz selten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top