2016-02-28 60 views
0

我记得关于一个接口的一些信息,如果它被实现的话,它会自动处理所有的比较运算符,所以没有必要单独实现每一个。有人记得这样的事吗?比较运算符重载一个尺寸适合所有

+0

见http://stackoverflow.com/a/43721867/5976576 – MotKohn

回答

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); 

但只会工作,为密切相关的种...

+0

感谢,我忘了最后一个想法。 – MotKohn