Цель существования Явные реализации IComparer.Compare в реализациях класса Comparer<T>
.
Если бы я реализовал public abstract int Compare (T x, T y)
, по какой причине и где он мог бы использовать вызов int IComparer.Compare (object ObjX, object ObjY)
, принимая во внимание, что ObjX & ObjY должно иметь возможность быть приведенным к типу T (в другом случае это будет ArgumentException).
Строка 12 и Строка 13 будут производить те же действия;
class Program
{
static void Main(string[] args)
{
IComparer iRefCommon = (IComparer)new BoxLengthFirst();
object obj1 = new Box(2, 6, 8);
object obj2 = new Box(10, 12, 14);
int resulCompare = iRefCommon.Compare((Box)obj1, (Box)obj2); //line12
resulCompare = (new BoxLengthFirst()).Compare(new Box(2, 6, 8),
new Box(10, 12, 14)); //line13
}
}
public class BoxLengthFirst : Comparer<Box>
{
public override int Compare(Box x, Box y)
{
if (x.Length.CompareTo(y.Length) != 0)
{
return x.Length.CompareTo(y.Length);
}
.....
else
{
return 0;
}
}
}
public class Box : IComparable, IComparable<Box>
{
public Box(int h, int l, int w)
{
this.Height = h;
this.Length = l;
this.Width = w;
}
public int Height { get; private set; }
public int Length { get; private set; }
public int Width { get; private set; }
public int CompareTo(object obj)
{
....
}
public int CompareTo(Box other)
{
....
}
}