簡単な例として、多くの点で異なるが「同等」とみなすことができる 2 つのクラスがあるとします。
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 を使用することは、(意味のあるところで) 一般的なことですか?