更新: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# 运算符符号 |
替换方法名称 |
运算符名称 |
---|---|---|
未定义 |
ToXxx 或 FromXxx |
op_Implicit |
未定义 |
ToXxx 或 FromXxx |
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 库的约定、术语和模式》)。