class MyNumber : IEquatable<MyNumber>
{
private int _x;
public int X
{
get { return this._x; }
set { this._x = value; }
}
public MyNumber(int x)
{
this._x = x;
}
public override int GetHashCode()
{
return this._x.GetHashCode();
}
public override bool Equals(object obj)
{
if (obj == null) return base.Equals(obj);
if (!(obj is MyNumber))
{
throw new InvalidCastException("The 'obj' argument is not a MyNumber object.");
}
else
{
return Equals(obj as MyNumber);
}
}
#region IEquatable<MyNumber> Members
public bool Equals(MyNumber other)
{
if (other == null)
{
return false;
}
else
{
return (other.X == this.X);
}
}
#endregion
public static bool operator ==(MyNumber a, MyNumber b)
{
if (object.ReferenceEquals(a, b)) return true;
if (object.ReferenceEquals(a, null)) return false;
if (object.ReferenceEquals(b, null)) return false;
return a.Equals(b);
}
public static bool operator !=(MyNumber a, MyNumber b)
{
return !(a == b);
}
}MyNumber a = new MyNumber(10);
MyNumber b = new MyNumber(10);
Console.WriteLine(a.Equals(b)); // True
Console.WriteLine(a == b); // True