我记得有关接口的一些内容,如果实现它将自动处理所有比较运算符,因此不必单独实现每个。有人记得这样的事吗?
答案 0 :(得分:1)
恕我直言,.NET中没有什么可以做到这一点。 C#中的运算符被定义为静态方法,因此不能像IEnumerable
的方法那样共享它们(通过扩展方法)。此外,Equals
和GetHashCode
方法必须明确重载(当您提供==
和!=
运算符时),您不能使用扩展方法或任何其他语言机制来共享它们未分类的课程。
您可能要做的就是创建自定义基类,该基类将实现IComparable<>
并覆盖Equals
和GetHashCode
,并在其上定义一组自定义运算符。
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);
但这只适用于密切相关的类型......