运算符重载

运算符重载允许使用“+”、“-”、“=”和“!=”等运算符合并和比较类型。 通过在类型中添加运算符重载,开发人员可以像使用内置基元类型一样使用该类型。 只有在运算对类型具有很直观的意义(例如,支持表示数值的类型的两个实例相加)的情况下,才应进行运算符重载。 不应使用运算符重载为非直观运算提供语法快捷方式。

下面的示例演示 DateTime 类的加法运算的签名。

[Visual Basic]

Public Shared Function op_Addition(ByVal d As DateTime, _
ByVal t As TimeSpan _
) As DateTime

[C#]

public static DateTime op_Addition(
DateTime d, 
TimeSpan t
);

避免定义运算符重载,但在其用法应类似于基元(内置)类型的类型中除外。

考虑在其用法应类似于基元类型的类型中定义运算符重载。

例如,String 定义运算符 == 和 !=。

在表示数字的结构(如 System.Decimal)中定义运算符重载。

在定义运算符重载时,不要偏离直观意义。 当重载运算符后运算结果非常直观的情况下才适于进行运算符重载。 例如,用一个 System.DateTime 对象减去另一个 System.DateTime 对象得到一个 System.TimeSpan 对象这一操作有直观的意义。 但是,使用逻辑 union 运算符联合两个数据库查询或使用 shift 运算符写入流则不合适。

除非至少有一个操作数属于定义重载的类型,否则不要提供运算符重载。

C# 编译器强制执行这一准则。

以对称方式重载运算符。

例如,如果重载相等运算符,也应重载不等运算符。 同样,如果重载小于运算符,也应重载大于运算符。

考虑为每个重载运算符所对应的方法提供友好的名称。

必须遵守此项准则才能符合 CLS。 下表列出了运算符符号、其相应的替换方法以及运算符名称。

C# 运算符符号

替换方法名称

运算符名称

未定义

ToXxxFromXxx

op_Implicit

未定义

ToXxxFromXxx

op_Explicit

+(二进制)

添加

op_Addition

-(二进制)

Subtract

op_Subtraction

*(二进制)

相乘

op_Multiply

/

Divide

op_Division

%

Mod

op_Modulus

^

Xor

op_ExclusiveOr

&(二进制)

BitwiseAnd

op_BitwiseAnd

|

BitwiseOr

op_BitwiseOr

&&

And

op_LogicalAnd

||

Or

op_LogicalOr

=

Assign

op_Assign

<<

LeftShift

op_LeftShift

>>

RightShift

op_RightShift

未定义

LeftShift

op_SignedRightShift

未定义

RightShift

op_UnsignedRightShift

==

Equals

op_Equality

>

CompareTo

op_GreaterThan

<

CompareTo

op_LessThan

!=

Equals

op_Inequality

>=

CompareTo

op_GreaterThanOrEqual

<=

CompareTo

op_LessThanOrEqual

*=

相乘

op_MultiplicationAssignment

-=

Subtract

op_SubtractionAssignment

^=

Xor

op_ExclusiveOrAssignment

<<=

LeftShift

op_LeftShiftAssignment

%=

Mod

op_ModulusAssignment

+=

添加

op_AdditionAssignment

&=

BitwiseAnd

op_BitwiseAndAssignment

|=

BitwiseOr

op_BitwiseOrAssignment

,

逗号

op_Comma

/=

Divide

op_DivisionAssignment

--

递减

op_Decrement

++

递增

op_Increment

-(一元)

Negate

op_UnaryNegation

+(一元)

Plus

op_UnaryPlus

~

OnesComplement

op_OnesComplement

部分版权所有 2005 Microsoft Corporation。 保留所有权利。

部分版权所有 Addison-Wesley Corporation。 保留所有权利。

设计指引的详细信息,请参阅"框架设计准则: 公约、 成语和可重复使用的模式。网络图书馆"书 Krzysztof Cwalina 和布拉德 · 艾布拉姆斯,2005年艾迪生 - 韦斯利,发表。

请参见

其他资源

成员设计准则

类库开发的设计准则