比较运算符重载一个大小适合所有

时间:2016-02-28 16:26:00

标签: c#

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

1 个答案:

答案 0 :(得分:1)

恕我直言,.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);

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