演算子のオーバーロード使用方法のガイドライン

次の規則は、演算子のオーバーロードのガイドラインを示しています。

  • System.Decimal 構造体などの論理組み込み言語型の値型で演算子を定義します。

  • 演算子のオーバーロード メソッドは、そのメソッドを定義したクラス内でだけサポートします。C# コンパイラでは、このガイドラインが適用されます。

  • 共通言語仕様 (CLS: Common Language Specification) に規定されている名前とシグネチャの規則を使用します。これは、C# コンパイラにより自動的に行われます。

  • 演算の結果がすぐに明確にわかる場合に、演算子のオーバーロードを使用します。たとえば、ある Time 値を別の Time 値から引いて TimeSpan を取得できるようにすることには意味があります。しかし、or 演算子を使用して 2 つのデータベース クエリの和集合を作成したり、shift を使用してストリームに書き込みを行うことは適切ではありません。

  • 演算子は、対称的な方法でオーバーロードします。たとえば、等値演算子 (==) をオーバーロードする場合は、否定等値演算子 (!=) もオーバーロードする必要があります。

  • 代替のシグネチャを提供します。ほとんどの言語は、演算子のオーバーロードをサポートしていません。このため、演算子をオーバーロードするすべての型に対し、ドメイン固有の適切な名前で、同等の機能を持つ 2 番目のメソッドを含めることが CLS では必須です。この二次的なメソッドの用意は CLS に規定されている要件です。次の例は、CLS 準拠です。

    public struct DateTime 
    {
       public static TimeSpan operator -(DateTime t1, DateTime t2) { }
       public static TimeSpan Subtract(DateTime t1, DateTime t2) { }
    }
    

演算子記号と、それに対応する代替メソッドおよび演算子名の一覧を次の表に示します。

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
> Compare op_GreaterThan
< Compare op_LessThan
!= Compare op_Inequality
>= Compare op_GreaterThanOrEqual
<= Compare 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
, 割り当てなし op_Comma
/= Divide op_DivisionAssignment
-- Decrement op_Decrement
++ Increment op_Increment
- (単項) Negate op_UnaryNegation
+ (単項) Plus op_UnaryPlus
~ OnesComplement op_OnesComplement

参照

クラス ライブラリ開発者向けのデザイン ガイドライン