IComparer IComparable IEquatable IEqualityComparer
IComparer IComparable
IComparable - 使用CompareTo()方法为对象定义接口,该方法接受相同类型的另一个对象,并将当前对象与传递的对象进行比较.它将比较内部化到对象,允许更内联的比较操作,并且当只有一种逻辑方式或绝大多数常见的默认方式来比较类型的对象时,它非常有用.
IComparer - 使用Compare()方法定义一个接口,该方法接受另一个类型的两个对象(不必实现IComparable)并比较它们.这使得比较外部化,并且当有许多可行的方法来比较类型的两个对象时,或者当类型没有实现IComparable时(或者IComparable实现比你想要的方式不同)并且你没有控制该类型的来源.
如果你想进行排序没有实现IComparable的对象,你需要创建一个实现IComparer接口 或者 ( Comparer 继承 ) (和接受这些对象类型进行比较)一类,它通过传递给Array.sort()方法.
IComparable用于为对象提供默认排序顺序.
IComparer是提供额外的比较机制.
https://www.cnblogs.com/fanfan-90/p/11967258.html ( 参考)
-------------------------------------------------------------------------------------------
IEquatable ( Equals ) IEqualityComparer (Equals GetHashCode)
如果你想进行比较没有实现IEquatable 的对象,你需要创建一个实现IEqualityComparer接口(和接受这些对象类型进行比较)一类,
IEqualityComparer GetHashCode() 先比较,相同才进行equal 比较,防止 引用不同,值相同的情况
IEquatable 多用于直接在类上 实现 Equals 方法, 不能改动 才使用 IEqualityComparer(接口) 或者 EqualityComparer ( 继承 ) 实现
IEqualityComparer用于在外部实现两个对象的相等性,例如,如果您想为两个类型定义一个比较器,但没有源,或者两个对象之间的相等性只在一些有限的上下文中有意义。
IEquatable是由对象本身(被比较相等的对象)实现的。