1+ module equals3
2+
3+ // <Snippet1>
4+ type Point ( x , y ) =
5+ member _.X = x
6+ member _.Y = y
7+
8+ override _.Equals ( obj ) =
9+ // Performs an equality check on two points (integer pairs).
10+ match obj with
11+ | :? Point as p ->
12+ x = p.X && y = p.Y
13+ | _ ->
14+ false
15+
16+ override _.GetHashCode () =
17+ ( x, y) .GetHashCode()
18+
19+ type Rectangle ( upLeftX , upLeftY , downRightX , downRightY ) =
20+ let a = Point( upLeftX, upLeftY)
21+ let b = Point( downRightX, downRightY)
22+
23+ member _.UpLeft = a
24+ member _.DownRight = b
25+
26+ override _.Equals ( obj ) =
27+ // Perform an equality check on two rectangles (Point object pairs).
28+ match obj with
29+ | :? Rectangle as r ->
30+ a.Equals( r.UpLeft) && b.Equals( r.DownRight)
31+ | _ ->
32+ false
33+
34+ override _.GetHashCode () =
35+ ( a, b) .GetHashCode()
36+
37+ override _.ToString () =
38+ $" Rectangle({a.X}, {a.Y}, {b.X}, {b.Y})"
39+
40+ let r1 = Rectangle( 0 , 0 , 100 , 200 )
41+ let r2 = Rectangle( 0 , 0 , 100 , 200 )
42+ let r3 = Rectangle( 0 , 0 , 150 , 200 )
43+
44+ printfn $" {r1} = {r2}: {r1.Equals r2}"
45+ printfn $" {r1} = {r3}: {r1.Equals r3}"
46+ printfn $" {r2} = {r3}: {r2.Equals r3}"
47+ // The example displays the following output:
48+ // Rectangle(0, 0, 100, 200) = Rectangle(0, 0, 100, 200): True
49+ // Rectangle(0, 0, 100, 200) = Rectangle(0, 0, 150, 200): False
50+ // Rectangle(0, 0, 100, 200) = Rectangle(0, 0, 150, 200): False
51+ // </Snippet1>
0 commit comments