我有自定义类Rational,Real和Complex。在Complex I中,重载运算符允许我比较Complex和Real,或者Complex和Rational。如果我可以将Rational的隐式转换定义为复杂,那么这很容易,但是由于不值得进入的原因,我不能。
因此,除其他外,我有
==(Complex a, Real b)
以及
==(Real a, Complex b)
显然,当我尝试比较时
c==null
我收到错误消息,说明调用不明确。我在一个相关的主题上看到了我可以定义==(Complex a, object b)
我想到的那个想法,但是如果我想允许对称,我还需要==(object a, Complex b)
,在这种情况下,两个复合体之间的比较将也是模棱两可的。
现在,当我检查null时,我必须先将Complex转换为对象。什么是更好的解决方案? (我希望有一个通用的解决方案,而不是依赖于类之间任何关系的解决方案,例如继承。)
答案 0 :(得分:0)
为什么要使用第二次过载?您确定不能使用第一张支票吗?没有你想要的“好看”解决方案。
答案 1 :(得分:0)
我认为你有类似==(Complex c, Real C)
和==(Complex c, Complex C)
的东西,当然编译器不知道选择哪一个,所以当你比较一个null时你必须把它像c1 == (Complex) null
。
答案 2 :(得分:0)
我应该发帖说我认为没有解决方案,我只是决定抛弃对称性并使用==(复杂a,对象b)。感谢所有发布的人!