运算符重载

更新:2007 年 11 月

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

下面的示例演示 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 定义运算符 == 和 !=。

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

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

以对称方式重载运算符。

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

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

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

C# 运算符符号

替换方法名称

运算符名称

未定义

ToXxxFromXxx

op_Implicit

未定义

ToXxxFromXxx

op_Explicit

+(二进制)

Add

op_Addition

-(二进制)

Subtract

op_Subtraction

*(二进制)

Multiply

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

*=

Multiply

op_MultiplicationAssignment

-=

Subtract

op_SubtractionAssignment

^=

Xor

op_ExclusiveOrAssignment

<<=

LeftShift

op_LeftShiftAssignment

%=

Mod

op_ModulusAssignment

+=

Add

op_AdditionAssignment

&=

BitwiseAnd

op_BitwiseAndAssignment

|=

BitwiseOr

op_BitwiseOrAssignment

,

Comma

op_Comma

/=

Divide

op_DivisionAssignment

--

Decrement

op_Decrement

++

Increment

op_Increment

-(一元)

Negate

op_UnaryNegation

+(一元)

Plus

op_UnaryPlus

~

OnesComplement

op_OnesComplement

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

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

有关设计指南的更多信息,请参见 Krzysztof Cwalina 和 Brad Abrams 编著、Addison-Wesley 于 2005 年出版的“Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries”(《框架设计指南:可重用 .NET 库的约定、术语和模式》)。

请参见

其他资源

成员设计准则

类库开发的设计准则