Почему разрешение метода «Равно» с обобщениями отличается от явных вызовов
У меня есть следующий пример:
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, хотя яуказав точный тип в универсальном аргументе?