C#重载运算符==:返回除bool之外的其他内容

时间:2017-11-21 09:23:04

标签: c# operator-overloading principles

我正在编写一个类库来使用牛顿法求解非线性方程。我偶然发现了运算符重载,并考虑重载== - 运算符。像expression1 == expression2之类的东西会将解决方案作为Constant返回,它基本上是System.Double的包装类:

public static Constant operator ==(Derivable d1, Derivable d2)
{
    return d1.Equal(d2);
}

虽然编译完全正常并且有效,但我问自己,如果将==-Operator重载为除了bool之外的两个对象相等的其他内容,那么它是否是一个合理的设计选择,尤其是因为你还必须重载!=-Operator。这是不好的做法,我应该只使用我的方法Equal

1 个答案:

答案 0 :(得分:4)

作为开发人员,我建议不要覆盖== Operator (C# Reference)

  

对于预定义的值类型,等于运算符(==)返回true,如果   其操作数的值相等,否则为false。以供参考   除了string之外的类型,==如果它的两个操作数引用则返回true   同一个对象。对于字符串类型,==比较的值   字符串。

我无法想象您希望覆盖此行为的情况。如果您正在使用类,则可以覆盖Object.Equals Method (Object)

如果您正在与其他开发人员合作,这可能会非常令人困惑。