运算符重载与之前的索引器类似,目的是为了让语言本身使用起来更方便直接,也是一种语法糖。
一 运算符重载(Operator Overloading)
运算符重载的存在,使得现有的各种运算符可以被重新定义并用来操作用户自定义的数据类型。运算符重载只是语法糖,因为它的本质实际上还是对方法的调用,并没有为语言本身增加新特性。
a) 运算符重载的写法
public static <返回值>operator<运算符> (<参数1>,<参数2>…)
还有一些规则:
必须用public static 修饰
不限制返回值的类型,但不推荐返回bool类型。
参数的数量取决于被重载的运算符的性质,如果是一元运算符,,重载时也需要一个参数,同样,二元需要两个。
重载一元运算符时,参数的类型必须是当前类。
重载二元运算符时,则要求第一个参数的类型是当前类,第二个参数类型不做限制。
b) 能够被重载的运算符
一元运算符:+,-,!,~,++,--,true,false
二元运算符:+,-,*,/,%,&,|,^,<<,>>,==,!=,>,<,>=,<=
c) 等号不能被重载,但如果二元运算符被重载,对应的组合运算符如+=,-=等也等同于被重载。
[],和()也无法重载。
d) 为了保证代码的可读性,只有在真正需要重载的时候再去重载。
学习资料:Inside C# by Tom Archer