比较运算符重载一刀切

本文关键字:一刀切 重载 运算符 比较 | 更新日期: 2023-09-27 18:36:33

我记得关于接口的一些事情,如果实现它将自动处理所有比较运算符,因此没有必要单独实现每个运算符。有人记得这样的事情吗?

比较运算符重载一刀切

恕我直言,.NET 中没有开箱即用的东西可以做到这一点。C# 中的运算符定义为静态方法,因此它们不能像IEnumerable方法(通过扩展方法)那样共享。此外,EqualsGetHashCode方法必须显式重载(当您提供==!=运算符时),您不能使用扩展方法或任何其他语言机制在许多未实现的类之间共享它们。

您可以做的关闭的事情是创建自定义基类,该基类将实现IComparable<>并覆盖EqualsGetHashCode,并在其上定义一组自定义运算符。

public class Base {
    public static bool operator >(Base l, Base r) {
        return true;    
    }
    public static bool operator <(Base l, Base r) {
        return false;
    }
}
public class Derived : Base { }
public class Derived2 : Base { }

然后使用:

    Derived a = new Derived(), b = new Derived();
    bool g = (a > b);

    Derived2 a2 = new Derived2();
    bool g2 = (a2 > b);

但这仅适用于密切相关的类型......