C#运算符重载
namespace Chapter11
{
   public class AddClass1
   {
       public int val;
       public static AddClass3 operator +(AddClass1 op1, AddClass2 op2)
       {
           AddClass3 returnVal = new AddClass3();
           returnVal.val = op1.val + op2.val;
           return returnVal;
       }
   }
    public class AddClass2
    {
        public int val;
       // public static AddClass3 operator +(AddClass1 op1, AddClass2 op2) //注意不要把相同的运算符添加到多个类中,因为它弄不清使用哪个运算符
       // {
       //     AddClass3 returnVal = new AddClass3();
       //     returnVal.val = op1.val + op2.val;
       //     return returnVal;
       //}
    }
    public class AddClass3
    {
        public int val;
    }
    class Program
    {
        static void Main(string[] args)
        {
            AddClass1 op1 = new AddClass1();
            op1.val = 5;
            AddClass2 op2 = new AddClass2();
            op2.val = 5;
            AddClass3 op3 = op1 + op2;
        }
    }
}
 
混合模式下的运算符重载: namespace Chapter11 { public class AddClass1 { public int val; public static AddClass3 operator +(AddClass1 op1, AddClass2 op2) { AddClass3 returnVal = new AddClass3(); returnVal.val = op1.val + op2.val; return returnVal; } } public class AddClass2 { public int val; // public static AddClass3 operator +(AddClass1 op1, AddClass2 op2) //注意不要把相同的运算符添加到多个类中,因为它弄不清使用哪个运算符 // { // AddClass3 returnVal = new AddClass3(); // returnVal.val = op1.val + op2.val; // return returnVal; //} } public class AddClass3 { public int val; } class Program { static void Main(string[] args) { AddClass1 op1 = new AddClass1(); op1.val = 5; AddClass2 op2 = new AddClass2(); op2.val = 5; AddClass3 op3 = op1 + op2; } } }
使用混合类型时操作数的顺序必须与运算符重载的参数顺序相同,除非提供了另外一个重载运算符和倒序的参数;
重载运算符:给类添加的运算符类型成员必须用static.
如:
1 public class AddClass1 2 { 3 public int val; 4 public static AddClass1 operator + (AddClass1 op1, AddClass1 op2) 5 { 6 AddClass1 returnVal = new AddClass1(); 7 returnVal.val = op1.val + op2.val; 8 return returnVal; 9 } 10 }
可以重载的运算符:
一元运算符:+,-,!,~,++,--,true,false
二元运算符:+,-,*,%,&,/,|,^,<<,>>
比较运算符:==,!=,<,>,<=,>=
如果重载True和false运算符,就可以在布尔表达式中使用类,例如(if(op1){}).
 
                    
                     
                    
                 
                    
                 
 
                
            
         
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号