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){}).
原文:http://www.cnblogs.com/cheny3636/p/4995844.html