運算子多載
更新:2007 年 11 月
運算子多載可允許利用類似 "+"、"-"、"=" 和 "!=" 的運算子來結合和比較型別。將運算子多載加入到型別之後,即可讓開發人員將此型別當做內建的基本型別 (Primitive Type) 一樣來使用此型別。只有當運算的意義對此型別而言是容易瞭解時 (例如,為了支援加入表示數值的型別之兩個執行個體),才應該執行運算子多載。運算子多載不應該用來為不是容易瞭解的運算提供語法捷徑。
下列範例將示範 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 |
Portions Copyright 2005 Microsoft Corporation.All rights reserved.
Portions Copyright Addison-Wesley Corporation.All rights reserved.
如需設計方針的詳細資訊,請參閱由 Krzysztof Cwalina 和 Brad Abrams 所著,並由 Addison-Wesley 於 2005 年發行的「Framework 設計方針:可重複使用之 .NET 程式庫的慣例、慣用語法和模式」一書。