题
我最近找到了此代码:
public static implicit operator XElement(XmlBase xmlBase)
{
return xmlBase.Xml;
}
有什么 static implicit operator
意思是?
解决方案
这是一个 转换操作员. 。这意味着您可以编写此代码:
XmlBase myBase = new XmlBase();
XElement myElement = myBase;
而且编译器不会抱怨!在运行时,将执行转换操作员 - 通过 myBase
作为论点,并返回有效的 XElement
作为结果。
这是您作为开发人员告诉编译器的一种方式:
“即使这些看起来像两种完全无关的类型,但实际上有一种方法可以从一种转换到另一个类型;只要让我处理如何做的逻辑。”
其他提示
这样的隐式操作员意味着您可以转换 XmlBase
到 XElement
隐式。
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
}
}
显然,最臭名昭著的用途可能是使用它将您的一个课程转换为另一个课程。但是,将它们与基本类型一起使用也值得一提...我认为它很少提到。
不隶属于 StackOverflow