オーバーロード可能な演算子 (C# プログラミング ガイド)Overloadable operators (C# Programming Guide)

C# では、operator キーワードを使用して静的なメンバー関数を定義することで、ユーザー定義型で演算子をオーバーロードできます。C# allows user-defined types to overload operators by defining static member functions using the operator keyword. ただし、次の表に示すように、すべての演算子をオーバーロードできるわけではなく、制限付きでオーバーロードできる演算子もあります。Not all operators can be overloaded, however, and others have restrictions, as listed in this table:

演算子Operators オーバーロード可/不可Overloadability
+-!~++--truefalse+, -, !, ~, ++, --, true, false これらの単項演算子はオーバーロードできます。These unary operators can be overloaded.
+-*/%&|^<<>>+, -, *, /, %, &, |, ^, <<, >> これらの 2 項演算子はオーバーロードできます。These binary operators can be overloaded.
==!=<><=>===, !=, <, >, <=, >= 比較演算子はオーバーロードできます (この表の後の注を参照してください)。The comparison operators can be overloaded (but see the note that follows this table).
&&||&&, || 条件付き論理演算子はオーバーロードできません。ただし、オーバーロードできる &| を使用して評価できます。The conditional logical operators cannot be overloaded, but they are evaluated using & and |, which can be overloaded.
[][] 配列のインデックス付け演算子はオーバーロードできませんが、インデクサーを定義できます。The array indexing operator cannot be overloaded, but you can define indexers.
(T)x(T)x キャスト演算子はオーバーロードできませんが、新しい変換演算子を定義できます (「explicit」および「implicit」を参照してください)。The cast operator cannot be overloaded, but you can define new conversion operators (see explicit and implicit).
+=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=+=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>= 代入演算子は明示的にオーバー ロードすることはできません。Assignment operators cannot be explicitly overloaded. ただし、二項演算子をオーバーロードするとき、対応する代入演算子がある場合は、それも暗黙的にオーバーロードされます。However, when you overload a binary operator, the corresponding assignment operator, if any, is also implicitly overloaded. たとえば、+= は、オーバーロード可能な + を使用して評価されます。For example, += is evaluated using +, which can be overloaded.
=.?:??->=>f(x)ascheckeduncheckeddefaultdelegateisnewsizeoftypeof=, ., ?:, ??, ->, =>, f(x), as, checked, unchecked, default, delegate, is, new, sizeof, typeof これらの演算子はオーバーロードできません。These operators cannot be overloaded.

注意

比較演算子をオーバーロードする場合はペアでオーバーロードする必要があります。つまり、== をオーバーロードする場合は != もオーバーロードする必要があります。The comparison operators, if overloaded, must be overloaded in pairs; that is, if == is overloaded, != must also be overloaded. 逆もまた真であり、!= をオーバーロードする場合は、== のオーバーロードも必要です。The reverse is also true, where overloading != requires an overload for ==. 比較演算子 <>、および <=>= の場合も同様です。The same is true for comparison operators < and > and for <= and >=.

演算子をオーバー ロードする方法については、演算子キーワードに関する記事を参照してください。For information about how to overload an operator, see the operator keyword article.

関連項目See also