Answers:
这是一个转换运算符。这意味着您可以编写以下代码:
XmlBase myBase = new XmlBase();
XElement myElement = myBase;
而且编译器不会抱怨!在运行时,将执行转换运算符- myBase
作为参数传入,并返回有效值XElement
作为结果。
这是您作为开发人员告诉编译器的一种方式:
“尽管它们看起来像两种完全不相关的类型,但实际上存在一种从一种转换为另一种的方法;让我来处理如何做到这一点的逻辑。”
另一个有趣的用法是(Unity用来检查对象(因此是MonoBehavior的实例)是否为空):
public static implicit operator bool (CustomClass c)
{
return c != null;
}
请注意,代码必须在类内部(在这种情况下为CustomClass)。这样,您可以执行以下操作:
void Method ()
{
CustomClass c1 = null;
CustomClass c2 = new CustomClass ();
bool b1 = c1; // is false
bool b2 = c2; // is true
if (!c1 && c2)
{
// Do stuff
}
}
显然,最臭名昭著的用法可能是使用它将一个类转换为另一个类。但是将它们与基本类型一起使用也是值得考虑的……而且我很少提到它。