override Equals method
using System; class Point: Object { protected int x, y; public Point() { this.x = 0; this.y = 0; } public Point(int X, int Y) { this.x = X; this.y = Y; } public override bool Equals(Object obj) { if (obj == null || GetType() != obj.GetType()) return false; Point p = (Point)obj; return (x == p.x) && (y == p.y); } public override int GetHashCode() { return x ^ y; } } class Point3D: Point { int z; public Point3D(int X, int Y, int Z) { this.x = X; this.y = Y; this.z = Z; } public override bool Equals(Object obj) { return base.Equals(obj) && z == ((Point3D)obj).z; } public override int GetHashCode() { return base.GetHashCode() ^ z; } } class MyClass { public static void Main() { Point point2D = new Point(5, 5); Point3D point3Da = new Point3D(5, 5, 2); Point3D point3Db = new Point3D(5, 5, 2); if (!point2D.Equals(point3Da)) { Console.WriteLine("point2D does not equal point3Da."); } if (!point3Db.Equals(point2D)) { Console.WriteLine("Likewise, point3Db does not equal point2D."); } if (point3Da.Equals(point3Db)) { Console.WriteLine("However, point3Da equals point3Db."); } } }