Development Class C#

using System;
class Rectangle {
   Point a, b;
   public Rectangle(int upLeftX, int upLeftY, int downRightX, int downRightY) {
      this.a = new Point(upLeftX, upLeftY);
      this.b = new Point(downRightX, downRightY);
   }
   public override bool Equals(Object obj) {
      if (obj == null || GetType() != obj.GetType()) return false;
      Rectangle r = (Rectangle)obj;
      return a.Equals(r.a) && b.Equals(r.b);
   }
   public override int GetHashCode() {
      return a.GetHashCode() ^ b.GetHashCode();
   }
}
class Point {
  private int x;
  private int y;
  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.GetHashCode() ^ y.GetHashCode();
  }
}
class MyClass {
   public static void Main() {
      Rectangle r1 = new Rectangle(0, 0, 100, 200);
      Rectangle r2 = new Rectangle(0, 0, 100, 200);
      Rectangle r3 = new Rectangle(0, 0, 150, 200);
      if (r1.Equals(r2)) {
         Console.WriteLine("Rectangle r1 equals rectangle r2!");
      }
      if (!r2.Equals(r3)) {
         Console.WriteLine("But rectangle r2 does not equal rectangle r3.");
      }
   }
}