首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >静态隐式运算符

静态隐式运算符
EN

Stack Overflow用户
提问于 2010-11-25 12:32:55
回答 4查看 57.8K关注 0票数 191

我最近发现了以下代码:

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

什么是static implicit operator卑劣?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-11-25 12:38:04

这是一个转换运算符..。这意味着您可以编写以下代码:

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

编译器也不会抱怨!在运行时,将执行转换运算符-传递myBase作为参数,并返回有效的XElement结果。

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

“尽管这看起来像两个完全不相关的类型,但实际上有一种方法可以从一个类型转换为另一个类型;只是让我来处理如何实现的逻辑。”

票数 314
EN

Stack Overflow用户

发布于 2010-11-25 12:36:53

这样的隐式运算符意味着您可以将XmlBaseXElement隐含地。

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

Stack Overflow用户

发布于 2018-07-10 22:42:39

另一个有趣的用法是( 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
    }
}

显然,最臭名昭著的用法可能是使用它将您的一个类转换为另一个类。但将它们与基本类型一起使用也值得考虑……我看到它很少被提及。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4273743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档