Static implicit operator

后端 未结 4 1183
孤城傲影
孤城傲影 2020-12-07 09:28

I recently found this code:

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

What does stati

相关标签:
4条回答
  • 2020-12-07 09:38

    Such an implicit operator means you can convert XmlBase to XElement implicitly.

    XmlBase xmlBase = WhatEverGetTheXmlBase();
    XElement xelement = xmlBase;   
    //no explicit convert here like: XElement xelement = (XElement)xmlBase;
    
    0 讨论(0)
  • 2020-12-07 09:43

    This is a conversion operator. It means that you can write this code:

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

    And the compiler won't complain! At runtime, the conversion operator will be executed - passing myBase in as the argument, and returning a valid XElement as the result.

    It's a way for you as a developer to tell the compiler:

    "even though these look like two totally unrelated types, there is actually a way to convert from one to the other; just let me handle the logic for how to do it."

    0 讨论(0)
  • 2020-12-07 09:50

    It's an implicit conversion operator (as opposed to an Explicit operator, which requires the (type) conversion syntax)

    0 讨论(0)
  • 2020-12-07 09:54

    Another interesting usage is (which Unity did to check if an object (and therefore an instance of MonoBehavior) is null):

    public static implicit operator bool (CustomClass c)
    {
        return c != null;
    }
    

    Note that the code has to be inside the class (CustomClass in this case). That way you can do something like this:

    void Method ()
    {
        CustomClass c1 = null;
        CustomClass c2 = new CustomClass ();
    
        bool b1 = c1; // is false
        bool b2 = c2; // is true
    
        if (!c1 && c2)
        {
            // Do stuff
        }
    }
    

    Obviously the most notorious use might be using it to convert one of your classes to another of your classes. But using them with basic types is worth a consideration as well... and I see it mentioned quite rarely.

    0 讨论(0)
提交回复
热议问题