举一个简单的例子,假设你有两个在很多方面都不同的类,但仍然可以被认为是“等价的”:
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);
}
}
}
这将允许任何声称等同于 WholeNumber 的对象被传递到 WholeNumber 的 Equals(object) 函数中,并获得所需的结果,而无需 WholeNumber 了解任何其他类。
这种模式是个好主意吗?将 IEquatable 与其他类一起使用是一件常见的事情吗?