Я бы не согласился с другими ответами. Животное в этом примере не является ценностным объектом, вполне возможно, что две кошки могут иметь одинаковое имя и цвет и быть совершенно разными сущностями. Логично, что вы говорите: «Эта кошка и эта кошка имеют одно и то же имя и один и тот же цвет, поэтому они - одна и та же кошка», что не обязательно соответствует действительности.
Я хотел бы предложить вам оставить Animal.Equals для реализации по умолчанию и создать отдельную реализацию IEqualityComparer, которая возвращает true, если животные имеют одинаковое имя / цвет.
public class AnimalNameColorComparer : IEqualityComparer<Animal>
{
public bool Equals(Animal a, Animal b)
{
return a.Name == b.Name &&
a.Color == b.Color
}
public int GetHashCode(Animal a)
{
return a.Name.GetHashCode() ^ a.Color.GetHashCode();
}
}
Постарайтесь запомнить, что существует множество разных способов сравнить кошку, и одного метода "равно" недостаточно:)
// Create two black cats called fluffy...
var cat1 = new Cat("Fluffy", "Black");
var cat2 = new Cat("Fluffy", "Black");
cat1.Equals(cat2) == false; // they are not the same cat!
var comparer = new AnimalNameColorComparer();
comparer.Equals(cat1, cat2) == true; // But they do have the same name & colour...