Bar*_*art 142 c# operators implicit-conversion
我最近发现这个代码:
public static implicit operator XElement(XmlBase xmlBase)
{
return xmlBase.Xml;
}
Run Code Online (Sandbox Code Playgroud)
什么static implicit operator意思?
Rex*_*x M 240
这是一个转换运算符.这意味着您可以编写此代码:
XmlBase myBase = new XmlBase();
XElement myElement = myBase;
Run Code Online (Sandbox Code Playgroud)
并且编译器不会抱怨!在运行时,将执行转换运算符 - myBase作为参数传入,并返回有效值XElement作为结果.
作为开发人员,这是一种告诉编译器的方法:
"尽管这些看起来像两个完全不相关的类型,但实际上有一种方法可以从一个转换为另一个;只需让我处理如何做到这一点的逻辑."
Che*_*hen 12
这种隐含的操作意味着你可以转换XmlBase到XElement隐.
XmlBase xmlBase = WhatEverGetTheXmlBase();
XElement xelement = xmlBase;
//no explicit convert here like: XElement xelement = (XElement)xmlBase;
Run Code Online (Sandbox Code Playgroud)
另一个有趣的用法是(Unity 用它来检查对象(以及 MonoBehavior 的实例)是否为空):
public static implicit operator bool (CustomClass c)
{
return c != null;
}
Run Code Online (Sandbox Code Playgroud)
请注意,代码必须在类内部(在本例中为 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
}
}
Run Code Online (Sandbox Code Playgroud)
显然,最臭名昭著的用途可能是使用它来将您的一个类转换为另一个类。但是将它们与基本类型一起使用也是值得考虑的……而且我很少看到它被提及。