using System.Collections.Generic;
using System.Globalization;
public static void Main()
var instance = new Height(1m);
Console.WriteLine("Are Equal: {0}", instance == instance);
Console.WriteLine("Are Equal: {0}", Object.Equals(instance, instance));
Console.WriteLine("Are Equal: {0}", Object.ReferenceEquals(instance, instance));
Console.WriteLine("Are Equal: {0}", instance.Equals(instance));
Console.WriteLine("Are Equal: {0}", new Height(1m) == new Height(1m));
Console.WriteLine("Are Equal: {0}", Object.Equals(new Height(1m), new Height(1m)));
Console.WriteLine("Are Equal: {0}", Object.ReferenceEquals(new Height(1m), new Height(1m)));
Console.WriteLine("Are Equal: {0}", new Height(1m).Equals(new Height(1m)));
public class Height: IEquatable<Height>
private readonly decimal _value;
public Height(decimal dataValue)
public decimal Value { get { return _value; } }
public override bool Equals(System.Object obj)
Height h = obj as Height;
if ((System.Object)h == null)
public bool Equals(Height h)
public override int GetHashCode()
return Value.GetHashCode();
public static bool operator ==(Height a, Height b)
if (System.Object.ReferenceEquals(a, b))
if (((object)a == null) || ((object)b == null))
return a.Value == b.Value;
public static bool operator !=(Height a, Height b)