我有自定义类Rational, Real和Complex。在Complex中,我重载运算符,它允许我比较一个Complex和一个Real,或者一个Complex和一个Rational。如果我可以定义一个从Rational到Complex的隐式转换,这将是很容易的,但是由于不值得深入研究的原因,我不能这样做。
因此,我有,其中,
==(Complex a, Real b)
和
==(Real a, Complex b)
显然当我尝试比较
时 c==null
得到的错误消息是调用是二义性的。我在一个相关的线程上看到我可以只定义==(Complex a, object b)
的想法,我已经想到了,但是如果我想允许对称,我还需要==(object a, Complex b)
,在这种情况下,两个复合物之间的比较也将是模糊的。
现在,当我检查null时,我必须首先将Complex转换为对象。有什么更好的解决方案吗?(我希望有一个通用的解决方案,而不是一个解决方案,依赖于类之间的任何关系,如继承)
我认为你有像==(Complex c, Real C)
和==(Complex c, Complex C)
这样的东西,当然编译器不会知道选择哪一个,所以当你比较一个null时,你必须像c1 == (Complex) null
一样转换它。
为什么要使用第二个重载?您确定不能用第一个帐户付款吗?不存在"好看"的解决方案。
我可能应该发布,我不认为有一个解决方案,我只是决定放弃对称和去==(复杂的a,对象b)。感谢大家谁张贴!