Mega Code Archive

 
Categories / C# by API / System
 

Implements IEquatable

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.CompareTo( 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.CompareTo( rhs ) < 0;     }     public static bool operator>( Complex lhs, Complex rhs ) {         return lhs.CompareTo( rhs ) > 0;     }     public static bool operator<=( Complex lhs, Complex rhs ) {         return lhs.CompareTo( rhs ) <= 0;     }     public static bool operator>=( Complex lhs, Complex rhs ) {         return lhs.CompareTo( 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 );     } }