【发布时间】:2017-11-21 09:23:04
【问题描述】:
我正在编写一个类库来使用牛顿法求解非线性方程。我偶然发现了运算符重载,并考虑过重载 ==-Operator。像expression1 == expression2 这样的东西将解决方案返回为Constant,它基本上是System.Double 的包装类:
public static Constant operator ==(Derivable d1, Derivable d2)
{
return d1.Equal(d2);
}
虽然它编译得非常好并且工作正常,但我问自己是否可以合理的设计选择重载 ==-Operator 以返回两个对象的相等性以外的东西作为 bool,尤其是因为你还必须重载!=-Operator。这是不好的做法吗?我是否应该只使用我的方法Equal?
【问题讨论】:
-
这几乎是糟糕的做法。如果你想返回一个双精度,定义你自己的方法,创建一个继承自双精度的抽象类并在那里实现它,或者创建一个扩展方法,但是重载运算符来做他们不应该做的事情..想象一下开发人员实现库并在 equals 上获得意外行为...
-
我会说这是一个基于意见的问题......但我个人会觉得如果我在两个对象上执行
==时它不会是bool会很混乱。至少它应该是隐式转换为 bool -
我个人建议不要这样做。
-
@DamienFlury 忘记了,好吧,所以类具有内部双值,实现一切 - 相同的结果 ;)
-
数学家....总是试图使事情过于复杂
标签: c# operator-overloading principles