Для простого примера, предположим, у вас есть два класса, которые отличаются во многих отношениях, но все-таки можно считать «equateable»:При переопределении Object.Equals целесообразно использовать переданные в Equal (MyType) объекты?
class WholeNumber: IEquatable<WholeNumber> {
int value;
public override bool Equals(object obj) {
if (obj is IEquatable<WholeNumber>) {
IEquatable<WholeNumber> other = (IEquatable<WholeNumber>) obj;
return other.Equals(this);
} else {
return false;
}
}
public bool Equals(WholeNumber other) {
return this.value == other.value;
}
}
class Fraction : IEquatable<WholeNumber> {
WholeNumber numerator;
WholeNumber denominator;
public bool Equals(WholeNumber other) {
if (denominator != 1) {
// Assume fraction is already reduced
return false;
} else {
return this.numerator.Equals(other);
}
}
}
Это позволит любой объект, который утверждает, что equateable в WholeNumber будет принят в функцию Equals (object) WholeNumber и получить желаемый результат без WholeNumber, который должен знать о любом другом классе.
Этот шаблон является хорошей идеей? Использует IEquatable с другими классами обычную (где это делает) вещь?
Пожалуйста, сделайте соответствующие проверки нуль в коде, а также чеки рекурсии;) –
Почему бы не создать номер класса называется и есть два класса вытекают из этого? Тогда вы можете иметь Number, реализующий IEquatable. – mc10