0

为什么某些运算符需要它,例如比较运算符。

<   <=   >   >=   =  <>

您还必须实施他们的补充吗?

<  >=

什么是限制你的对象实现只是

<

如果这对它有特定的含义,并且

>= 

没有

注意:我的解决方法是将 Obsolete 属性粘贴在不需要的运算符上。

4

2 回答 2

4

.Net 中的运算符重载(至少对于 C# 和 VB 而言)故意不如 C++ 中的运算符重载灵活。

Java完全消除重载的一个原因是太多的开发人员滥用重载来做一些看起来很聪明的事情,这会使其他开发人员感到困惑,并破坏了通用算法的核心假设,即期望能够合理地比较两个实例一种用户类型。

虽然 .Net 带来了一些灵活性,但设计者小心翼翼地只允许某些运算符的重载,目的是让它们仅用于其习惯含义。

对称实现比较运算符的要求是对这一意图的认可。

如果您想进行更积极的运算符重载,我建议您考虑使用 F#,您可以在其中访问更广泛的符号调色板来绘制巧妙的运算符符号。

于 2012-05-17T01:21:54.670 回答
0

大概是因为如果您重载运算符的一侧,您正在实现一些自定义规则,并且默认运算符将与您的规则不匹配,从而产生奇怪的行为。

例如,如果您对“int >”的定义是“return (x > 5);” (出于某种原因......)然后你没有覆盖'int <'运算符的逆规则;

4 > 1 将是错误的(根据您的规则),但 4 < 1将是错误的(根据默认规则)。

这是不合逻辑的,吉姆。

于 2012-05-17T01:21:06.123 回答