1.什么是操作符重载
定义:(百科定义)就是把已经定义的、有一定功能的操作符进行重新定义,来完成更为细致具体的运算等功能。操作符重载可以将概括性的抽象操作符具体化,便于外部调用而无需知晓内部具体运算过程。
2.为什么需要运算符重载?
在C#中 ,内置的数据类型有:int、double等这些类型是可以直接进行数值加减运算。例如:int i, j = 1; int sum=i+j;可以直接得到想要的和sum。
如果要比较一个类(结构)进行对象比较加、减等操作 该如何实现?例如一个类Test,有对象a,b 如何实现对象相加a+b?
3.运算符重载出场
公式:public static “返回类型” operator “操作符符号” {…………}
eg: public static Test operator +(Test lhs, Test rhs){ return new Test(lhs.value + rhs.value); }
4.案例
struct Test { private int value; public int Value { get { return value; } } public Test(int iValue) { this.value = iValue; } //C#操作符重载 //1、声明一个二元操作符,将两个Test加到一起 public static Test operator +(Test lhs, Test rhs) { return new Test(lhs.value + rhs.value); } //2、声明一个二元操作符,将Test和int加到一起 public static Test operator +(Test lhs, int rhs) { return lhs + new Test(rhs); } //3、声明一个二元操作符,将int和Test加到一起 public static Test operator +(int lhs, Test rhs) { return new Test(lhs) + rhs; } //4、声明一个一元操作符, public static Test operator ++(Test h) { h.value++; return h; } }
定义一个结构struct,当然定义成类class一样
结果:
只有定义了才可做操作相关的操作,例如上面3:将int和Test加到一起只可以 int+Test对象 ,2.3+Test对象则报错
5.注意
C#中有6个比较运算符,它们分为 3对:
● == 和 !=
● > 和 <
● >= 和 <=
C#要求成对重载比较运算符。如果重载了==,也必须重载!=,否则会产生编译错误
6.可以重载的运算符(源自C#高级编程)