Ниже приведена простая тестовая программа, которая выдает StackOverflowException
при вызове Equals
. Я ожидал, что универсальный Equals
, полученный от объекта, вызовет мой IEquatable<MyClass>.Equals
, но он этого не делает, вместо этого он вызывает сам себя. Зачем? Тип параметра, кажется, в порядке. Почему он называет универсальную версию в первую очередь? Я в замешательстве.
using System;
namespace consapp
{
class Program
{
static void Main(string[] args)
{
MyClass x0 = new MyClass("x0");
MyClass x1 = new MyClass("x");
Console.WriteLine(x1.Equals(x0));
}
}
internal class MyClass : IEquatable<MyClass>
{
public string Name { get; set; }
public MyClass(string s) { this.Name = s; }
public override bool Equals(object x) { return this.Equals(x as MyClass); }
public override int GetHashCode() { return this.Name.ToLowerInvariant().GetHashCode(); }
bool IEquatable<MyClass>.Equals(MyClass x) { return x != null && this.Name == x.Name; }
}
}