Listing 1

using namespace System;
public value class Point
{
    int x;
    int y;
public:
// define read-write instance properties X and Y
    property int X
    {
        int get() { return x; }
        void set(int val) { x = val; }
    }
    property int Y
    {
        int get() { return y; }
        void set(int val) { y = val; }
    }
// define instance constructors

    Point(int xor, int yor)
    {
        X = xor;
        Y = yor;
    }
    void Move(int xor, int yor) 
    {
        X = xor;
        Y = yor;
    }   
    virtual bool Equals(Object^ obj) override
    {
        if (obj == nullptr)
        {
           return false;
        }
        if (GetType() == obj->GetType())
        {
            Point^ p = static_cast<Point^>(obj);
            return (X == p->X) && (Y == p->Y);
        }
        return false;
    }
    static bool operator==(Point p1, Point p2)
    {
        return (p1.X == p2.X) && (p1.Y == p2.Y);
    }
//  static bool operator==(Point% p1, Point% p2)
//  {
//      return (p1.X == p2.X) && (p1.Y == p2.Y);
//  }

//  static bool operator==(Point& p1, Point& p2)
//  {
//      return (p1.X == p2.X) && (p1.Y == p2.Y);
//  }
    virtual int GetHashCode() override
    {
        return X ^ (Y << 1);
    }
    virtual String^ ToString() override
    {
        return String::Concat("(", X, ",", Y, ")");
    }
};