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, ")");
}
};