Csharp/C Sharp by API/System/IEquatable

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

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>