我正在编写一个类库来使用牛顿法求解非线性方程。我偶然发现了运算符重载,并考虑重载== - 运算符。像expression1 == expression2
之类的东西会将解决方案作为Constant
返回,它基本上是System.Double
的包装类:
public static Constant operator ==(Derivable d1, Derivable d2)
{
return d1.Equal(d2);
}
虽然编译完全正常并且有效,但我问自己,如果将==-Operator
重载为除了bool
之外的两个对象相等的其他内容,那么它是否是一个合理的设计选择,尤其是因为你还必须重载!=-Operator
。这是不好的做法,我应该只使用我的方法Equal
?
答案 0 :(得分:4)
作为开发人员,我建议不要覆盖== Operator (C# Reference)。
对于预定义的值类型,等于运算符(==)返回true,如果 其操作数的值相等,否则为false。以供参考 除了string之外的类型,==如果它的两个操作数引用则返回true 同一个对象。对于字符串类型,==比较的值 字符串。
我无法想象您希望覆盖此行为的情况。如果您正在使用类,则可以覆盖Object.Equals Method (Object)。
如果您正在与其他开发人员合作,这可能会非常令人困惑。