Почему разрешение метода «Равно» с обобщениями отличается от явных вызовов

У меня есть следующий пример:

namespace ComparisonExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var hello1 = new Hello();
            var hello2 = new Hello();

            // calls Hello.Equals
            var compareExplicitly = hello1.Equals(hello2);

            // calls Object.Equals
            var compareWithGenerics = ObjectsEqual(hello1, hello2); 
        }

        private static bool ObjectsEqual(TValue value1, TValue value2)
        {
            return value1.Equals(value2);
        }
    }

    class Hello : IEquatable
    {
        public bool Equals(Hello other)
        {
            return true; // doesn't matter
        }
    }
}

Вопрос почему во второмРавно» позвони мнем перенаправлен в Object.Equals вместо Hello.Equals, хотя яуказав точный тип в универсальном аргументе?

Ответы на вопрос(2)

Ваш ответ на вопрос