我最近找到了此代码:

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

有什么 static implicit operator 意思是?

有帮助吗?

解决方案

这是一个 转换操作员. 。这意味着您可以编写此代码:

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

而且编译器不会抱怨!在运行时,将执行转换操作员 - 通过 myBase 作为论点,并返回有效的 XElement 作为结果。

这是您作为开发人员告诉编译器的一种方式:

“即使这些看起来像两种完全无关的类型,但实际上有一种方法可以从一种转换到另一个类型;只要让我处理如何做的逻辑。”

其他提示

这样的隐式操作员意味着您可以转换 XmlBaseXElement 隐式。

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

这是一个隐式转换操作员(而不是明确的操作员,这需要 (type) 转换语法)

另一个有趣的用法是(Unity确实检查了一个对象(因此是单词的实例)是否为null):

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

这样,您可以做这样的事情:

void Method ()
{
    CustomClass c1 = null;
    CustomClass c2 = new CustomClass ();

    bool b1 = c1; // is false
    bool b2 = c2; // is true

    if (!c1 && c2)
    {
        // Do stuff
    }
}

显然,最臭名昭著的用途可能是使用它将您的一个课程转换为另一个课程。但是,将它们与基本类型一起使用也值得一提...我认为它很少提到。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top