运算符重载一直是一个很诡异事情,因为在写代码的时候,不知道某个运算符有没有被重载过。在 C++ 里面,运算符重载可以写在类的外面,当 intellisense 不工作的时候,找到一个运算符的重载函数是一件相当头疼的事情。这个问题在 C# 中改善了不少,因为运算符重载一定要写在类内,而且 intellisense 很强大。不过另一个问题又产生了……

先来看 C++ 中的“==”重载:
struct A{
int x;
int y;
};
inline
bool operator == (const A& a, const A& b){
return a.x == b.x && a.y == b.y;
}
上面这段代码中,由于声明的关系,a 和 b 永远不可能为 NULL,所以直接调用 a.x 和 b.x 是没有问题的。
而在 C# 中:
struct A
{
public int x, y;
public static bool operator ==(A a, A b)
{
return a.x == b.x && a.y == b.y;
}
public static bool operator !=(A a, A b)
{
return !(a == b);
}
}
这段代码是没问题的,因为 A 是 struct,而 struct 不可能为 null。但换成 class 就有问题了,比如:
class A
{
public int x, y;
public static bool operator == (A a, A b)
{
if (a == null && b == null)
{
return true;
}
if (a == null || b == null)
{
return false;
}
return a.x == b.x && a.y == b.y;
}
public static bool operator != (A a, A b)
{
return !(a == b);
}
}
由于 reference type 可以为 null,所以要先检查 a 和 b 是不是 null,但是“a == null”这一句又会去调用“operator ==”,于是就无限递归下去了……想了很久都没想出来变通的方法,而且 System.String 的实现也很诡异:
public static bool operator == (string a, string b)
{
return Equals(a, b);
}
public static bool Equals (string a, string b)
{
return ((a == b) || (((a != null) && (b != null)) && EqualsHelper(a, b)));
}
看上去也会无限递归的(Reflector 出来的,不一定准),很神奇……
虽然对于 Referece type 不建议重载==,但是不建议并不代表不能用吧,这个设计太挫了…
相关推荐:
ChatGPT不能用了?了解这一背后的真相及解决方法,ai恐怖头像
seo软件叫什么,seo软件视频教程 ,eps ai 缩略图
GPT怎么收费?揭秘AI技术的定价与价值,ai报考高考
SEO北京:数字时代,企业成功的关键,湖南网站建设湖南岚鸿
SEO大量优化:如何通过精准策略提升网站流量,突破搜索引擎排名瓶颈,吕梁本地网站推广平台
OpenAI银行卡扣款的公司是哪家?揭秘背后的支付流程与安全保障,AI素描相片
SEO优化工具优势:提升网站排名,带来流量和转化的秘密武器,ai圆形造字
SEO基础知识解析:如何提升网站排名,助力企业成长,毕节企业建设网站
AI自动读文:让阅读更轻松、更高效的智能革命,寄ai空
ChatGPT40不收费版本:科技革新,智能助手助力生活与工作,ai医疗武器有哪些
为什么行业都要做seo,为什么要做seo ,ai明信片
AI一键生成原创文章,让创作更高效更轻松!
ChatGPT-4中文免费破解版:无需付费,体验最强AI助手,ai写作生成器官方下载
揭开“好的AI软件”背后的秘密:让生活和工作更智能的利器
seo需要什么部门,seo主要干什么 ,ai接入仪器
ChatGPT打不开网页?看完这篇你就懂了!,国内ai写作安卓软件
SEO舆情:如何通过有效的舆情管理提升企业品牌形象,seo推广外包提高收录
什么是seo在线咨询,什么是seo在线咨询服务 ,unreal ai
AI免费文章生成器:轻松创作高质量内容的终极工具
ChatGPT免费版每天提问有次数限制吗?揭秘如何高效使用AI助手!,机甲ai手绘
SEO导航:助力网站提升流量与排名的必备工具,荣昌建筑网站建设
ChatGPT中文版下载免费版:智能对话新时代,尽在,ai光波
AI提取文章重要内容:让信息抓取更高效、更精准,松鼠ai 教学
优化标题:如何让你的文章更具吸引力与点击力,整站网站优化解决方案
文章缩写AI:高效编辑的未来之光
seo营销方法是什么,seo营销模式 ,ai山海
从零到一:网站历史的演变与未来趋势,肇庆市国外网站建设平台
SEO收集:如何通过有效数据收集提升网站排名,鞍山商城网站建设报价
seo要会些什么,seo需要学些什么内容 ,轻盈ai
求一个AI软件,彻底改变你的工作与生活!
seo需要学些什么内容,学seo的基础 ,中国ai公司年收入
ChatGPT出现错误503?你需要知道的解决方案和应对策略,ai拉伸字效
AI智能软件:未来科技的核心力量
ChatGPT发生故障,背后隐藏着哪些不为人知的原因与挑战?,硬件ai和软件ai
ChatGPT的破解版:AI世界的新突破,ai无禁忌
专业关键词助力SEO优化,让你的内容脱颖而出,东营响应式网站优化
BingAdapter设置数据后没有显示数据?解决方案在这里!,ai中如何把图变形
如何利用AI生成高质量文章,提升写作效率与创意?
ChatGPT显示无法加载网站是怎么回事?解决方法!,glow将军ai
AI一键生成文章网页版,让内容创作更简单高效
SEO才能:提升网站排名,突破网络营销的核心竞争力,南宁本地seo营销公司
SEO收费如何选择合适的SEO服务,提升网站排名并增加曝光度,做网站优化哪家实惠
OpenAI您的信用卡被拒绝了?请尝试用借记卡支付,轻松解决支付问题!,ai cdr缩略图补丁
从“官网扒下来”看企业数字化转型的未来,摄影营销策略推广文案
SEO教育:搜索引擎优化,开启成功职业之路,搜狗SEO排名接单
AI搜索写文章:一丝丝智慧背后的无限可能,电脑免费ai写作神器
【SEO优化全攻略】提升网站流量的终极秘籍,带你轻松玩转搜索引擎优化!,金融网站推广维护
OpenAI智能诊断医疗-开启精准医疗新纪元,跟侯维静学ai
《“查看更多”背后的秘密:让你的人生更加丰富多彩!》,宁安公司网站建设
SEO攻略:搜索引擎优化,快速提升网站排名,网站推广网站优化费用