Как вызывается метод не вызываясь?

Дан код,который сравнивает точки против часовой стрелки.В строчке 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])
    // какая-то логика  
}
→ Ссылка