static void Main(string[] args)
var h1 = new Heading(355f);
var h2 = new Heading(10f);
var h3 = new Heading(0f);
var h4 = new Heading(318f);
var h5 = new Heading(318f);
Console.WriteLine(h4 == h5);
Console.WriteLine((h1 + h2).Degree);
Console.WriteLine((h3 - h4).Degree);
private const float MaxDegrees = 360;
public float Degree {get; set;}
public Heading(float heading)
public static Heading operator +(Heading a, Heading b)
var val = (a.Degree + b.Degree) % MaxDegrees;
public static Heading operator -(Heading a, Heading b)
var difference = Math.Abs(a.Degree - b.Degree);
return new Heading(MaxDegrees - difference);
return new Heading(difference);
public static bool operator ==(Heading a, Heading b)
return a.Degree == b.Degree;
public static bool operator !=(Heading a, Heading b)
public override bool Equals(object other)
if (other is not Heading)
return ((Heading) other).Degree == Degree;
public override int GetHashCode()
hash = hash * 23 + Degree.GetHashCode();