可以看出,运算符重载看起来与标准静态方法声明类似,但它们使用关键字operator 和 运算符本身,而不是一个方法名。现在可以成功地使用 + 运算符和这个类。
注意:
1.要重载运算符,可给类添加运算符类型成员(它们必须是static)。
2.一些运算符有多种用途,(如 - 运算符就有一元和二元两种功能),因此我们还指定了要处理多少个操作数,以及这些操作数的类型。
3.一般情况下,操作数的类型与定义运算符的类相同,但也可以处理混合 类型的运算符。
operator 关键字用于在类或结构声明中声明运算符。运算符声明可以采用下列四种形式之一:
public static result-type operator unary-operator ( op-type operand ) public static result-type operator binary-operator ( op-type operand, op-type2 operand2 ) public static implicit operator conv-type-out ( conv-type-in operand ) public static explicit operator conv-type-out ( conv-type-in operand ) |
参数
- result-type
-
运算符的结果类型。
- unary-operator
-
下列运算符之一:+ - ! ~ ++ — true false
- op-type
-
第一个(或唯一一个)参数的类型。
- operand
-
第一个(或唯一一个)参数的名称。
- binary-operator
-
其中一个:+ - * / % & | ^ << >> == != > < >= <=
- op-type2
-
第二个参数的类型。
- operand2
-
第二个参数的名称。
- conv-type-out
-
类型转换运算符的目标类型。
- conv-type-in
-
类型转换运算符的输入类型。
备注
前两种形式声明了用户定义的重载内置运算符的运算符。注意,并非所有内置运算符都可以被重载(请参见可重载的运算符)。op-type 和 op-type2 中至少有一个必须是封闭类型(即运算符所属的类型)。例如,这将防止重定义整数加法运算符。
后两种形式声明了转换运算符。conv-type-in 和 conv-type-out 中正好有一个必须是封闭类型(即,转换运算符只能从它的封闭类型转换为其他某个类型,或从其他某个类型转换为它的封闭类型)。
运算符只能采用值参数,不能采用 ref 或 out 参数。
任何运算符声明的前面都可以有一个可选的属性(C# 编程指南)列表。