次に、次のクラス宣言を与えます。
class Employee {
public string Name { get; set; }
public int Age { get; set; }
public override bool Equals(object obj)
{
Console.WriteLine("In Equals(Object)");
if (obj is Employee)
if (this.Name == (obj as Employee).Name && this.Age == (obj as Employee).Age)
return true;
else
return false;
else
return false;
}
public bool Equals(Employee obj)
{
Console.WriteLine("In Equals(Employee)");
return this.Equals(obj as Object);
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
Employee.Equals(Employee) を使用しようとしていますが、何らかの理由で機能しません:
private static void CompareObjects(Object a, Object b)
{
if (a.Equals(b as Employee)) Console.WriteLine("a.Equals(b) returns true");
else Console.WriteLine("a.Equals(b) returns false");
}
b を Employee としてキャストしているため、Employee.Equals(Object) よりも署名に一致するため、Employee.Equals(Employee) が呼び出されることを期待していましたが、代わりに後者が呼び出されています。私は何を間違っていますか?