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

更新 : 2008 年 7 月

C# では、演算子とは、1 つ以上の式 (オペランド) を入力として受け取り、値を返す用語または記号のことです。インクリメント演算子 (++) や new など、1 つのオペランドを受け取る演算子を単項演算子と言います。算術演算子 (+、-、*、/) など、2 つのオペランドを受け取る演算子を二項演算子と言います。条件演算子 (?:) は、3 つのオペランドを受け取る、C# でただ 1 つの三項演算子です。

次の C# ステートメントには、1 つの単項演算子と 1 つのオペランドがあります。インクリメント演算子 ++ は、オペランド y の値を変更します。

y++;

次の C# ステートメントには、それぞれ 2 つのオペランドを持つ 2 つの二項演算子があります。代入演算子 = には、オペランドとして整数 y と式 2 + 3 が含まれています。式 2 + 3 自体には加算演算子が含まれ、オペランドとして 2 と 3 の 2 つの整数が使用されています。

y = 2 + 3;

オペランドには、他の任意の数の演算で構成される、任意のサイズの有効な式を使用できます。式を評価するとき、コンパイラは、最初にすべてのオペランドを左から右へ評価します。すべてのオペランドの評価が完了すると、演算子が特定の順序 (演算子の優先順位) で評価されます。以下の表では、実行する演算の種類を基にして演算子を分類しています。各カテゴリは、優先順位に従って配列されています。

主な演算子

説明

x.y

メンバ アクセス。

f(x)

メソッドおよびデリゲートの呼び出し。

a[x]

配列アクセスおよびインデクサ アクセス。

x++

後置インクリメント。

x--

後置デクリメント。

new T(...)

オブジェクトおよびデリゲートの作成。

new T(...){...}

初期化子を使用したオブジェクトの作成。「オブジェクト初期化子とコレクション初期化子 (C# プログラミング ガイド)」を参照してください。

new {...}

匿名オブジェクト初期化子。「匿名型 (C# プログラミング ガイド)」を参照してください。

new T[...]

配列の作成。「配列 (C# プログラミング ガイド)」を参照してください。

typeof(T)

T 型の System.Type オブジェクトを取得します。

checked(x)

checked コンテキストで式を評価します。

unchecked(x)

unchecked コンテキストで式を評価します。

default (T)

T 型の既定値を取得します。

delegate {}

匿名関数 (匿名メソッド)。

単項演算子

説明

+x

同一。

-x

否定。

!x

論理否定。

~x

ビットごとの否定。

++x

前置インクリメント。

--x

前置デクリメント。

(T)x

x を明示的に T 型に変換します。

乗算演算子

説明

*

乗算。

/

除算。

%

剰余。

加算演算子

説明

x + y

加算、文字列の連結、デリゲートの組み合わせ。

x - y

減算、デリゲートの削除。

シフト演算子

説明

x << y

左シフト。

x >> y

右シフト。

関係演算子と型演算子

説明

x < y

より小さい。

x > y

より大きい。

x <= y

以下。

x >= y

以上。

x is T

x が T の場合は true を返します。それ以外の場合は false を返します。

x as T

T として型指定された x を返します。x が T でない場合は null を返します。

等値演算子

説明

x == y

等しい。

x != y

等しくない。

代入演算子と匿名関数

説明

=

代入。

x op= y

複合代入。サポートされる演算子は、+=-=*=/=%=&=|=!=<<=>>= です。

(T x) => y

匿名関数 (ラムダ式)

論理演算子、条件演算子、Null 演算子

カテゴリ

説明

論理 AND

x & y

整数のビットごとの AND、ブール型の論理 AND。

論理 XOR

x ^ y

整数のビットごとの XOR、ブール型の論理 XOR。

論理 OR

x | y

整数のビットごとの OR、ブール型の論理 OR。

条件 AND

x && y

x が true の場合にのみ y を評価します。

条件 OR

x || y

x が false の場合にのみ y を評価します。

Null 合体演算子

X ??y

x が null の場合は y と評価され、それ以外の場合は x と評価されます。

条件

x ?: y : z

x が true の場合は y と評価され、x が false の場合は z と評価されます。

優先順位の同じ演算子が式に 2 つ含まれている場合、それらの演算子は結合規則に基づいて評価されます。結合規則が左から右の演算子は、左から右に評価されます。たとえば、x * y / z は (x * y) / z と評価されます。結合規則が右から左の演算子は、右から左に評価されます。代入演算子と三項演算子 (?:) は、結合規則が右から左です。他の二項演算子はすべて結合規則が左から右です。

かっこを使って式を囲むと、その式は他の式よりも先に評価されます。たとえば、2 + 3 * 2 は通常、8 になります。その理由は、乗算演算子の方が加算演算子よりも優先順位が高いからです。しかし、この式を (2 + 3) * 2 と記述すると、結果は 10 になります。この場合、加算演算子 (+) を乗算演算子 (*) より先に評価するように C# コンパイラに指示するからです。

カスタム クラスやカスタム構造体では、演算子の動作を変更できます。このプロセスは演算子のオーバーロードと呼ばれます。詳細については、「オーバーロードされた演算子 (C# プログラミング ガイド)」を参照してください。

関連項目

詳細については、「演算子キーワード (C# リファレンス)」および「C# の演算子」を参照してください。

参照

概念

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

参照

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

履歴の変更

日付

履歴

理由

2008 年 7 月

未定義の出力について誤りのある説明を削除

情報の拡充