Csharp/CSharp Tutorial/Operator Overload/True false operator

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

Overload true and false for TwoDimension.

<source lang="csharp">using System;

class TwoDimension {

 int x, y;
  
 public TwoDimension() { 
    x = y = 0; 
 }   
 public TwoDimension(int i, int j) { 
    x = i; 
    y = j;
 }   

 // Overload true.   
 public static bool operator true(TwoDimension op) { 
   if((op.x != 0) || (op.y != 0)) 
     return true; // at least one coordinate is non-zero 
   else 
     return false; 
 }   

 // Overload false. 
 public static bool operator false(TwoDimension op) { 
   if((op.x == 0) && (op.y == 0)) 
     return true; // all coordinates are zero 
   else 
     return false; 
 }   

 // Overload unary --.  
 public static TwoDimension operator --(TwoDimension op)  
 {  
   // for ++, modify argument  
   op.x--;  
   op.y--;   
 
   return op;  
 }  

 // Show X, Y, Z coordinates.   
 public void show()   
 {   
   Console.WriteLine(x + ", " + y);   
 }   

}

class MainClass {

 public static void Main() {   
   TwoDimension a = new TwoDimension(5, 6);   
   TwoDimension b = new TwoDimension(10, 10);   
   TwoDimension c = new TwoDimension(0, 0);   
  
   Console.Write("Here is a: ");   
   a.show();   
   Console.Write("Here is b: ");   
   b.show();   
   Console.Write("Here is c: ");   
   c.show();   
   Console.WriteLine();   
  
   if(a) 
      Console.WriteLine("a is true."); 
   else 
      Console.WriteLine("a is false."); 

   if(b) 
      Console.WriteLine("b is true."); 
   else 
      Console.WriteLine("b is false."); 

   if(c) 
      Console.WriteLine("c is true."); 
   else 
      Console.WriteLine("c is false."); 

   Console.WriteLine(); 

   Console.WriteLine("Control a loop using a TwoDimension object."); 
   do { 
     b.show(); 
     b--; 
   } while(b); 

 }   

}</source>

Here is a: 5, 6
Here is b: 10, 10
Here is c: 0, 0
a is true.
b is true.
c is false.
Control a loop using a TwoDimension object.
10, 10
9, 9
8, 8
7, 7
6, 6
5, 5
4, 4
3, 3
2, 2
1, 1

true and false operator

<source lang="csharp">using System;

   public class MyType
   {
       public static bool operator true ( MyType e )
       {
           return  ( e == null ) ? false : e.b;
       }
       public static bool operator false ( MyType e )
       {
           return  ( e == null ) ? true : !e.b;
       }
       public bool b;
       public MyType( bool b )
       {
           this.b = b;
       }
       public static void Main( string[] args )
       {
           MyType myTrue = new MyType( true );
           MyType myFalse = new MyType( false );
           MyType myNull = null;
           if ( myTrue )
           {
               System.Console.WriteLine( "true" );
           }
           else
           {
               System.Console.WriteLine( "false" );
           }
           if ( myFalse )
           {
               System.Console.WriteLine( "true" );
           }
           else
           {
               System.Console.WriteLine( "false" );
           }
           if ( myNull )
           {
               System.Console.WriteLine( "true" );
           }
           else
           {
               System.Console.WriteLine( "false" );
           }
       }
   }</source>
true
false
false

true/false operator for Complex

<source lang="csharp">using System; public struct Complex {

   public Complex( double real, double imaginary ) {
       this.real = real;
       this.imaginary = imaginary;
   }
   public override string ToString() {
       return String.Format( "({0}, {1})", real, imaginary );
   }
   public double Magnitude {
       get {
           return Math.Sqrt( Math.Pow(this.real, 2) + Math.Pow(this.imaginary, 2) );
       }
   }
   public static bool operator true( Complex c ) {
       return (c.real != 0) || (c.imaginary != 0);
   }
   public static bool operator false( Complex c ) {
       return (c.real == 0) && (c.imaginary == 0);
   }
   private double real;
   private double imaginary;

} public class MainClass {

   static void Main() {
       Complex cpx1 = new Complex( 1.0, 3.0 );
       if( cpx1 ) {
           Console.WriteLine( "cpx1 is true" );
       } else {
           Console.WriteLine( "cpx1 is false" );
       }
       Complex cpx2 = new Complex( 0, 0 );
       Console.WriteLine( "cpx2 is {0}", cpx2 ? "true" : "false" );
   }

}</source>

cpx1 is true
cpx2 is false