Как вызывается метод не вызываясь?
Дан код,который сравнивает точки против часовой стрелки.В строчке Array.Sort() есть 2 аргумента в виде массива самих точек и "сравнителя" их.Смутил меня 2-ой аргумент,где создается новый объект класса ClockwiseComparer,где никак не вызывается метод Compare,а просто создается новый объект.Каким образом вызывается этот метод? Прошу сильно меня не пинать т.к изучаю программирование и ООП для меня в новинку.
public class Point
{
public double X;
public double Y;
}
public class ClockwiseComparer : IComparer
{
public int Compare(object x, object y)
{
var dot1 = (Point)x;
var dot2 = (Point)y;
return Math.Atan2(-dot1.Y, -dot1.X).CompareTo(Math.Atan2(-dot2.Y, -dot2.X));
}
}
internal class Program
{
static void Main(string[] args)
{
var array = new[]
{
new Point { X = 1, Y = 0 },
new Point { X = -1, Y = 0 },
new Point { X = 0, Y = 1 },
new Point { X = 0, Y = -1 },
new Point { X = 0.01, Y = 1 }
};
Array.Sort(array, new ClockwiseComparer());
foreach (Point e in array)
Console.WriteLine("{0} {1}", e.X, e.Y);
}
}
Ответы (1 шт):
Автор решения: Алексей Шиманский
→ Ссылка
Да на самом деле всё просто. Метод Sort внутри себя просто вызовет метод Compare у переданного класса. Вот и всё. Условно будет так:
Sort(array, comparer) {
// какая-то логика
comparer.Compare(array[i], array[i + 1])
// какая-то логика
}