オーバーロードされた演算子 (C# プログラミング ガイド)

C# では、operator キーワードを使用して静的メンバー関数を定義することにより、ユーザー定義型が演算子をオーバーロードできます。 ただし、すべての演算子をオーバーロードできるわけではありません。また、制約がある場合もあります。詳細については、次の表を参照してください。

演算子

オーバーロードできるかどうか

+-!~++--truefalse

これらの単項演算子はオーバーロードできます。

+-*/%&|, ^<<>>

これらの二項演算子はオーバーロードできます。

==!=<><=>=

比較演算子はオーバーロードできます。後述のメモを参照してください。

&&||

条件論理演算子はオーバーロードできませんが、オーバーロードできる & および |を使用して評価されます。

[]

配列の添字演算子はオーバーロードできませんが、インデクサーは定義できます。

()

キャスト演算子はオーバーロードできませんが、新しい変換演算子は定義できます。詳細については、「explicit」および「implicit」を参照してください。

+=-=*=/=%=&=|=^=<<=>>=

代入演算子はオーバーロードできませんが、+= などは、オーバーロードできる + を使用して評価されます。

=.?:->newissizeoftypeof

これらの演算子はオーバーロードできません。

注意

比較演算子をオーバーロードする場合は、ペアとしてオーバーロードする必要があります。つまり、== をオーバーロードする場合は、!= もオーバーロードする必要があります。 これは、逆の場合でも同じです。また、< と > および <= と >= の場合もペアでオーバーロードします。

カスタム クラスの演算子をオーバーロードするには、正しいシグネチャを使用してクラスでメソッドを作成する必要があります。 メソッドには、"operator X" という名前を付ける必要があります。この X は、オーバーロードされる演算子の名前または記号です。 単項演算子のパラメーターは 1 つ、二項演算子のパラメーターは 2 つです。 いずれの場合も、次の例に示すように、1 つのパラメーターは、その宣言元のクラスまたは構造体と同じ型である必要があります。

public static Complex operator +(Complex c1, Complex c2)

詳細については、「方法 : 演算子のオーバーロードを使用して複素数クラスを作成する (C# プログラミング ガイド)」を参照してください。

参照

参照

ステートメント、式、および演算子 (C# プログラミング ガイド)

演算子 (C# プログラミング ガイド)

C# 演算子

概念

C# プログラミング ガイド

その他の技術情報

Why are overloaded operators always static in C#? (オーバーロードされた演算子が C# で常に静的になる理由)