2 つのインスタンスが同じsを持つ場合に等しいと見なされる不変Point
クラスを実装しようとしています。Jon Skeet の値型の実装を使用しています。Point
Coordinate
Coordinate
s の等価性を比較するために、私Point
も継承しEqualityComparer<Point>
てIEquatable<Point>
おり、以下のような単体テストがあります。
Point.cs:
public class Point : EqualityCompararer<Point>, IEquatable<Point>
{
public Coordinate Coordinate { get; private set; }
// EqualityCompararer<Point>, IEquatable<Point> methods and other methods
}
PointTests.cs:
[Fact]
public void PointReferencesToSamePortalAreNotEqual()
{
var point1 = new Point(22.0, 24.0);
var point2 = new Point(22.0, 24.0);
// Value equality should return true
Assert.Equal(point1, point2);
// Reference equality should return false
Assert.False(point1 == point2);
}
今、実装しなければならない 3 つのインターフェイス/抽象メソッドに本当に混乱しています。これらは:
IEquatable<Point>.Equals(Point other)
EqualityComparer<Point>.Equals(Point x, Point y)
EqualityComparer<Point>.GetHashCode(Point obj)
MSDNIEquatable<Point>.Equals
によると、私は をオーバーライドしたので、以下も実装する必要があります。
Object.Equals(object obj)
Object.GetHashCode(object obj)
今、私は単体テストを満たすために必要なすべてのEquals
andメソッドについて本当に混乱しています (参照の等価性は false を返し、値の等価性は and に対して true を返す必要があります)。GetHashCode
point1
point2
Equals
とについてもう少し詳しく説明できる人はいますGetHashCode
か?