作用
重载如 + - * /之类的运算符,让自定义类型(类或结构体)的对象能够使用运算符。
特点
- 必须定义为静态。
- 一个运算符可以多个重载。
- 条件运算符需要成对出现。
- 参数顺序和操作顺序一致。
- 在类中重载的运算符必须至少有一个参数是该类的类型。
- 返回值类型通常是包含该重载的类
- 不能用ref和out关键字
class MyClass
{
public int x;
public int y;
//访问修饰符 static 返回值类型 operator 运算符(参数列表)
public static MyClass operator +(MyClass a,MyClass b)
{
//逻辑
}
}
一个运算符可以多个重载,参数顺序和操作顺序一致,在类中重载的运算符必须至少有一个参数是该类的类型
class MyClass
{
public int x;
public int y;
//MyClass中重载的符号参数中必须至少有一个是MyClass类型
public static MyClass operator +(MyClass a,MyClass b) //+的一个重载
{
MyClass c = new MyClass();
c.x = a.x+b.x;
c.y = a.y+b.y;
return c;
}
public static MyClass operator +(MyClass a,int b) //+的另一个重载
{
MyClass c = new MyClass();
c.x = a.x+b;
c.y = a.y+b;
return c;
}
}
static void Main(string[],args)
{
MyClass myClass = new MyClass();
myClass.x = 10;
myClass.y = 10;
//MyClass _myClass = 10 + myClass 错误,MyClass中的+只重载了(MyClass + int,MyClass在前,int在后)
MyClass _myClass = myClass + 10;
}
可以重载的运算符
算术运算符都可重载(+,-,*,/,%,++等)
逻辑运算符 !可重载
位运算符都可重载(|,&,^,~,<<,>>等)
条件运算符(>,<,>=,<=,==),条件运算符需要成对出现(>,<必须同时实现,>=,<=必须同时实现)
不可重载运算符
逻辑运算符 &&和||。
索引号[]。
强制类型转换()。
.(点),三目运算符?:,赋值运算符 =。