Csharp/C Sharp by API/System/IEquatable
implements IEquatable
<source lang="csharp"> using System; public struct Complex : IComparable, IEquatable<Complex>, IComparable<Complex>{
public Complex( double real, double img ) { this.real = real; this.img = img; } public override bool Equals( object other ) { bool result = false; if( other is Complex ) { result = Equals( (Complex) other ); } return result; } public bool Equals( Complex that ) { return (this.real == that.real && this.img == that.img); } public override int GetHashCode() { return (int) this.Magnitude; } public int CompareTo( Complex that ) { int result; if( Equals( that ) ) { result = 0; } else if( this.Magnitude > that.Magnitude ) { result = 1; } else { result = -1; } return result; } int IComparable.rupareTo( object other ) { if( !(other is Complex) ) { throw new ArgumentException( "Bad Comparison" ); } return CompareTo( (Complex) other ); } public override string ToString() { return String.Format( "({0}, {1})", real, img ); } public double Magnitude { get { return Math.Sqrt( Math.Pow(this.real, 2) + Math.Pow(this.img, 2) ); } } public static bool operator==( Complex lhs, Complex rhs ) { return lhs.Equals( rhs ); } public static bool operator!=( Complex lhs, Complex rhs ) { return !lhs.Equals( rhs ); } public static bool operator<( Complex lhs, Complex rhs ) { return lhs.rupareTo( rhs ) < 0; } public static bool operator>( Complex lhs, Complex rhs ) { return lhs.rupareTo( rhs ) > 0; } public static bool operator<=( Complex lhs, Complex rhs ) { return lhs.rupareTo( rhs ) <= 0; } public static bool operator>=( Complex lhs, Complex rhs ) { return lhs.rupareTo( rhs ) >= 0; } private double real; private double img;
} public class MainClass {
static void Main() { Complex cpx1 = new Complex( 1.0, 3.0 ); Complex cpx2 = new Complex( 1.0, 2.0 ); Console.WriteLine( "cpx1 = {0}, cpx1.Magnitude = {1}", cpx1, cpx1.Magnitude ); Console.WriteLine( "cpx2 = {0}, cpx2.Magnitude = {1}\n", cpx2, cpx2.Magnitude ); Console.WriteLine( "cpx1 == cpx2 ? {0}", cpx1 == cpx2 ); Console.WriteLine( "cpx1 != cpx2 ? {0}", cpx1 != cpx2 ); Console.WriteLine( "cpx1 < cpx2 ? {0}", cpx1 < cpx2 ); Console.WriteLine( "cpx1 > cpx2 ? {0}", cpx1 > cpx2 ); Console.WriteLine( "cpx1 <= cpx2 ? {0}", cpx1 <= cpx2 ); Console.WriteLine( "cpx1 >= cpx2 ? {0}", cpx1 >= cpx2 ); }
}
</source>