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

更新 : 2007 年 11 月

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

演算子

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

+-!~++--truefalse

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

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

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

==, !=, <, >, <=, >=

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

&&, ||

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

[]

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

()

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

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

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

=.?:->newissizeoftypeof

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

8edha89s.alert_note(ja-jp,VS.90).gifメモ :

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

カスタム クラスの演算子をオーバーロードするには、正しいシグネチャを使用してクラスでメソッドを作成する必要があります。メソッドには、"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#?