A better way to overload !, |, and & for TwoDimension. : Operator overload : Operator Overload C# Examples


C# Examples » Operator Overload » Operator overload »

 

A better way to overload !, |, and & for TwoDimension.





This version automatically enables the && and || operators.




    
using  System;      
      
class  TwoDimension  {      
    int  x,  y;
      
    public  TwoDimension()  {  
          x  =  y  =  0;  
    }      
    public  TwoDimension(int  i,  int  j)  {  
          x  =  i;  
          y  =  j;
    }      
  
  
    //  Overload  |  for  short-circuit  evaluation.      
    public  static  TwoDimension  operator  |(TwoDimension  op1,  TwoDimension  op2)      
    {    
        if(  ((op1.x  !=  0)  ||  (op1.y  !=  0)  )  |  
              ((op2.x  !=  0)  ||  (op2.y  !=  0))  )  
            return  new  TwoDimension(1,  1);      
        else      
            return  new  TwoDimension(0,  0);      
    }      
  
    //  Overload  &  for  short-circuit  evaluation.      
    public  static  TwoDimension  operator  &(TwoDimension  op1,  TwoDimension  op2)      
    {      
        if(  ((op1.x  !=  0)  &&  (op1.y  !=  0))  &  
              ((op2.x  !=  0)  &&  (op2.y  !=  0)  )  )  
            return  new  TwoDimension(1,  1);      
        else      
            return  new  TwoDimension(0,  0);      
    }      
  
    //  Overload  !.      
    public  static  bool  operator  !(TwoDimension  op)      
    {      
        if(op)  return  false;      
        else  return  true;      
    }      
  
    //  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;  
    }      
  
    //  Show  X,  Y
    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.");  
        }
        
        if(b)  {
                Console.WriteLine("b  is  true.");  
        }
        
        if(c)  {
                Console.WriteLine("c  is  true.");  
        }
        
  
        if(!a)  {
              Console.WriteLine("a  is  false.");  
        }
        if(!b)  {
              Console.WriteLine("b  is  false.");  
        }
        if(!c)  {
              Console.WriteLine("c  is  false.");  
        }
  
        Console.WriteLine();  
  
        Console.WriteLine("Use  &  and  |");  
        if(a  &  b)  
              Console.WriteLine("a  &  b  is  true.");  
        else  
              Console.WriteLine("a  &  b  is  false.");  
  
        if(a  &  c)  
              Console.WriteLine("a  &  c  is  true.");  
        else  
              Console.WriteLine("a  &  c  is  false.");  
  
        if(a  |  b)  
              Console.WriteLine("a  |  b  is  true.");  
        else  
              Console.WriteLine("a  |  b  is  false.");  
  
        if(a  |  c)  
              Console.WriteLine("a  |  c  is  true.");  
        else  
              Console.WriteLine("a  |  c  is  false.");  
  
        Console.WriteLine();  
  
        //  now  use  short-circuit  ops  
        Console.WriteLine("Use  short-circuit  &&  and  ||");  
        if(a  &&  b)  
                Console.WriteLine("a  &&  b  is  true.");  
        else  
                Console.WriteLine("a  &&  b  is  false.");  
  
        if(a  &&  c)  
                Console.WriteLine("a  &&  c  is  true.");  
        else  
                Console.WriteLine("a  &&  c  is  false.");  
  
        if(a  ||  b)  
                Console.WriteLine("a  ||  b  is  true.");  
        else  
                Console.WriteLine("a  ||  b  is  false.");  
  
        if(a  ||  c)  
                Console.WriteLine("a  ||  c  is  true.");  
        else  
                Console.WriteLine("a  ||  c  is  false.");  
    }      
}
    
   
  
   



Output

Here is a: 5, 6
Here is b: 10, 10
Here is c: 0, 0

a is true.
b is true.
c is false.

Use & and |
a & b is true.
a & c is false.
a | b is true.
a | c is true.

Use short-circuit && and ||
a && b is true.
a && c is false.
a || b is true.
a || c is true.


HTML code for linking to this page:

Follow Navioo On Twitter

C# Examples

 Navioo Operator Overload
» Operator overload