①自定义转换
为自己的结构或者类定义显式和隐式转换
对目标对象进行隐式转换:
public static implicit operator 转换类型(被转换类型 目标对象){…}
调用:
转换类型 转换类型的对象=目标对象;
这行代码应当出现在对象转换为的类中,而且转换函数是没有函数名称的,如:
1 | class Dog{ |
对目标类型进行显式转换:
public static explicit operator 转换类型(被转换类型 目标类){…}
调用:
转换类型 转换类型的对象=(转换类型的对象)目标对象;
如:
1 | class Dog{ |
②重载运算符
利用现有的某种运算符,针对自定义类(派生)或者结构,定义某种运算操作。
如:父亲*母亲=儿子 语法:
public static Human operator * (Human male,Human female)
{
…
return new Human();
}
Human 为运算返回值。 重载运算符的定义语法也是在类中使用,实例化该例后即可对其对象和派生出的类的对象使用(是对类还是对对象要看如何定义)。 如:
1 | class Human{ |
可重载的运算符:
一元运算符:+,-,!,~,++,—,true,false(操作数必须是类或结构)
二元运算符:+,-,*,/,%,&,!,^,<<,>>,==,!=,>,<,>=,<= (两个操作数至少有一个是类或结构)
以下运算符不能重载:=,&&,,[],()等 重载运算符不能做以下事: ⚪创造新运算符 ⚪改变运算符语法 ⚪重定义因算符如何预处理类型(int a+int b等于a-b) ⚪改变运算符的优先级和结合性