前言
操作符重载可有利于我们实现自己想要的算法和排序等 使其更加灵活地使用。
操作符重载
考虑下面的ComplexNumber类,其中定义了一个静态方法Add,用于实现两个复数的
相加操作。
调用:
我们会发现 这样写好像不是那么的让人理解 很不自然 不习惯
操作符定义的使用
人们通常 习惯用 “c3=c1+c2”这样的语句,使用操作符重载的机制可以使这些操作符作用于用户自定义的类型
操作符重载的示例
对于ComplexNumber类,只需将其中的方法名“Add”改为“operator+”就能实现对“+”操作符的重载
操作符重载的定义
作为一种特殊的函数成员,被重载的操作符必须被声明为公有的和静态的,
并通过在关键字operator后跟操作符来声明。
代码示例:要求—将每个数乘以一个数 得到一个新的结果
结果:
C#中的操作符重载
C#中的允许被重载的操作符常用的有以下几种:
一元操作符:++,- -
二元操作符:+,-,*,/,%,==,!=,>,<,>=,<=等。
操作符重载的要求
重载的一元操作符要求有一个参数,且参数类型应与当前类型一致(相同或者是能进行隐式转换)
重载的二元操作符要求有两个参数,且至少有一个参数类型与当前类型一致
代码示例:
结果:
考虑到操作的对称性,一元操作符true和false,二元操作符==和!=,>和<,以及>=和<=都要求被成对重载。
提示
在C#语言中,大多数操作符重载的返回类型都没有限制,例如两个复数相乘的结果
可定义为一个复数,也可以定义一个实数。但对于比较操作符而言,建议它们的返回
类型都应当是bool,这不仅符合人们的思维习惯,也有利于保持语义的一致性。
例如:
结果:
总结
操作符重载其实在平时不常见 不过大家如果遇到有需求的使用情况还是应该了解到这个东西的存在