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

C# では、 演算子 は式またはステートメントの中で 1 つ以上の オペランド に適用されるプログラム要素です。In C#, an operator is a program element that is applied to one or more operands in an expression or statement. インクリメント演算子 (++) や newなど、1 つのオペランドを受け取る演算子を 単項 演算子と言います。Operators that take one operand, such as the increment operator (++) or new, are referred to as unary operators. 算術演算子 (+-*/) など、2 つのオペランドを受け取る演算子を 二項 演算子と言います。Operators that take two operands, such as arithmetic operators (+,-,*,/), are referred to as binary operators. 条件演算子 (?:) は、3 つのオペランドを受け取る、C# でただ 1 つの三項演算子です。One operator, the conditional operator (?:), takes three operands and is the sole ternary operator in C#.

次の C# ステートメントには、1 つの単項演算子と 1 つのオペランドがあります。The following C# statement contains a single unary operator and a single operand. インクリメント演算子 ++は、オペランド yの値を変更します。The increment operator, ++, modifies the value of the operand y.

y++;

次の C# ステートメントには、それぞれ 2 つのオペランドを持つ 2 つの二項演算子があります。The following C# statement contains two binary operators, each with two operands. 代入演算子 =には、オペランドとして整数の変数 y と式 2 + 3 が含まれています。The assignment operator, =, has the integer variable y and the expression 2 + 3 as operands. 2 + 3 自体も、加算演算子と、2 つのオペランド ( 23) で構成されています。The expression 2 + 3 itself consists of the addition operator and two operands, 2 and 3.

y = 2 + 3;

演算子、評価、演算子の優先順位Operators, evaluation, and operator precedence

オペランドは、任意の長さのコードで構成される有効な式で、任意の数の副次式を含むことができます。An operand can be a valid expression that is composed of any length of code, and it can comprise any number of sub expressions. 複数の演算子を含む式の場合、演算子が適用される順序は 演算子の優先順位結合規則、およびかっこによって決定されます。In an expression that contains multiple operators, the order in which the operators are applied is determined by operator precedence, associativity, and parentheses.

各演算子には優先順位が定義されています。Each operator has a defined precedence. 優先順位のレベルが異なる複数の演算子を含む式の場合、演算子の優先順位によって演算子が評価される順序が決定されます。In an expression that contains multiple operators that have different precedence levels, the precedence of the operators determines the order in which the operators are evaluated. たとえば、次のステートメントでは n1に 3 が代入されます。For example, the following statement assigns 3 to n1.

n1 = 11 - 2 * 4;

乗算は減算よりも優先順位が高いため、最初に乗算が実行されます。The multiplication is executed first because multiplication takes precedence over subtraction.

以下の表では、実行する演算の種類を基にして演算子を分類しています。The following table separates the operators into categories based on the type of operation they perform. 各カテゴリは、優先順位に従って配列されています。The categories are listed in order of precedence.

主な演算子Primary Operators

正規表現Expression 説明Description
x.yx.y

x?.yx?.y
メンバー アクセス。Member access

条件付きのメンバー アクセス。Conditional member access
f(x)f(x) メソッドおよびデリゲートの呼び出し。Method and delegate invocation
a[x]a[x]

a?[x]a?[x]
配列アクセスおよびインデクサー アクセス。Array and indexer access

条件付きの配列アクセスおよびインデクサー アクセス。Conditional array and indexer access
x++x++ 後置インクリメント。Post-increment
x--x-- 後置デクリメント。Post-decrement
new T(...)new T(...) オブジェクトおよびデリゲートの作成。Object and delegate creation
new T(...){...}T(...){...} 初期化子を使用したオブジェクトの作成。Object creation with initializer. オブジェクト初期化子とコレクション初期化子」を参照してください。See Object and Collection Initializers.
new {...}{...} 匿名オブジェクト初期化子。Anonymous object initializer. 匿名型」を参照してください。See Anonymous Types.
new T[...]T[...] 配列の作成。Array creation. 配列」を参照してください。See Arrays.
typeof(T)typeof(T) T 型の System.Type オブジェクトを取得します。Obtain System.Type object for T
checked(x)checked(x) checked コンテキストで式を評価します。Evaluate expression in checked context
unchecked(x)unchecked(x) unchecked コンテキストで式を評価します。Evaluate expression in unchecked context
default (T)default (T) T 型の既定値を取得します。Obtain default value of type T
delegate {}delegate {} 匿名関数 (匿名メソッド)。Anonymous function (anonymous method)

単項演算子Unary Operators

正規表現Expression 説明Description
+x+x 同一。Identity
-x-x 否定。Negation
!x!x 論理否定。Logical negation
~x~x ビットごとの否定。Bitwise negation
++x++x 前置インクリメント。Pre-increment
--x--x 前置デクリメント。Pre-decrement
(T)x(T)x x を明示的に T 型に変換します。Explicitly convert x to type T

乗算演算子Multiplicative Operators

正規表現Expression 説明Description
* 乗算Multiplication
/ 除算記号Division
% 剰余。Remainder

加法演算子Additive Operators

正規表現Expression 説明Description
x + yx + y 加算、文字列の連結、デリゲートの組み合わせ。Addition, string concatenation, delegate combination
x - yx - y 減算、デリゲートの削除。Subtraction, delegate removal

シフト演算子Shift Operators

Expression 説明Description
x << yx << y 左シフト。Shift left
x >> yx >> y 右シフト。Shift right

関係演算子と型演算子Relational and Type Operators

正規表現Expression 説明Description
x < yx < y より小さいLess than
x > yx > y 次の値より大きいGreater than
x <= yx <= y 以下Less than or equal
x >= yx >= y 以上Greater than or equal
x is Tx is T x が T の場合は true を返します。それ以外の場合は false を返します。Return true if x is a T, false otherwise
x as Tx as T T として型指定された x を返します。x が T でない場合は null を返します。Return x typed as T, or null if x is not a T

等値演算子Equality Operators

正規表現Expression 説明Description
x == yx == y 等しいEqual
x != yx != y 等しくないNot equal

論理演算子、条件演算子、Null 演算子Logical, Conditional, and Null Operators

カテゴリCategory 正規表現Expression 説明Description
論理 ANDLogical AND x & yx & y 整数のビットごとの AND、ブール型の論理 AND。Integer bitwise AND, Boolean logical AND
論理 XORLogical XOR x ^ yx ^ y 整数のビットごとの XOR、ブール型の論理 XORInteger bitwise XOR, Boolean logical XOR
論理 ORLogical OR x | yx | y 整数のビットごとの OR、ブール型の論理 ORInteger bitwise OR, Boolean logical OR
条件 ANDConditional AND x && yx && y x が true の場合にのみ y を評価します。Evaluates y only if x is true
条件 ORConditional OR x || yx || y x が false の場合にのみ y を評価します。Evaluates y only if x is false
Null 合体演算子Null coalescing x ??x ?? Yy x が null の場合は y と評価され、それ以外の場合は x と評価されます。Evaluates to y if x is null, to x otherwise
条件Conditional x ?x ? y : zy : z x が true の場合は y と評価され、x が false の場合は z と評価されます。Evaluates to y if x is true, z if x is false

代入演算子と匿名関数Assignment and Anonymous Operators

正規表現Expression 説明Description
= 代入Assignment
x op= yx op= y 複合代入。Compound assignment. サポートされる演算子: +=-=*=/=%=&=|=^=<<=>>=Supports these operators: +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=
(T x) => y(T x) => y 匿名関数 (ラムダ式)Anonymous function (lambda expression)

結合規則Associativity

1 つの式に同じ優先順位の演算子が複数個含まれている場合、それらの演算子は結合規則に基づいて評価されます。When two or more operators that have the same precedence are present in an expression, they are evaluated based on associativity. 結合規則が左から右の演算子は、左から右に評価されます。Left-associative operators are evaluated in order from left to right. たとえば、 x * y / z(x * y) / zと評価されます。For example, x * y / z is evaluated as (x * y) / z. 結合規則が右から左の演算子は、右から左に評価されます。Right-associative operators are evaluated in order from right to left. たとえば、代入演算子は結合規則が右から左です。For example, the assignment operator is right associative. そうでない場合、次のコードはエラーになります。If it were not, the following code would result in an error.

int a, b, c;  
c = 1;  
// The following two lines are equivalent.  
a = b = c;  
a = (b = c);  
  
// The following line, which forces left associativity, causes an error.  
//(a = b) = c;  

別の例として、三項演算子 (?:) は、結合規則が右から左です。As another example the ternary operator (?:) is right associative. ほとんどの二項演算子は結合関係が左から右です。Most binary operators are left associative.

式に含まれる演算子の結合規則が左から右であっても、右から左であっても、各式のオペランドは初めに左から右に評価されます。Whether the operators in an expression are left associative or right associative, the operands of each expression are evaluated first, from left to right. 次の例では、演算子とオペランドの評価の順序について示します。The following examples illustrate the order of evaluation of operators and operands.

ステートメントStatement 評価の順序Order of evaluation
a = b a、b、=a, b, =
a = b + c a、b、c、+、=a, b, c, +, =
a = b + c * d a、b、c、d、*、+、=a, b, c, d, *, +, =
a = b * c + d a、b、c、*、d、+、=a, b, c, *, d, +, =
a = b - c + d a、b、c、-、d、+、=a, b, c, -, d, +, =
a += b -= c a、b、c、-=、+=a, b, c, -=, +=

かっこの追加Adding parentheses

かっこを使用すると、演算子の優先順位と結合規則によって定められた順序を変更できます。You can change the order imposed by operator precedence and associativity by using parentheses. たとえば、 2 + 3 * 2 は通常、8 と評価されます。乗算演算子の方が加法演算子よりも優先順位が高いからです。For example, 2 + 3 * 2 ordinarily evaluates to 8, because multiplicative operators take precedence over additive operators. しかし、この式を (2 + 3) * 2と記述すると、加算の方が乗算よりも先に評価され、結果は 10 になります。However, if you write the expression as (2 + 3) * 2, the addition is evaluated before the multiplication, and the result is 10. 次の例では、かっこを使用した式での評価の順序について示します。The following examples illustrate the order of evaluation in parenthesized expressions. 前の例では、演算子が適用される前にオペランドが評価されていました。As in previous examples, the operands are evaluated before the operator is applied.

ステートメントStatement 評価の順序Order of evaluation
a = (b + c) * d a、b、c、+、d、*、=a, b, c, +, d, *, =
a = b - (c + d) a、b、c、d、+、-、=a, b, c, d, +, -, =
a = (b + c) * (d - e) a、b、c、+、d、e、-、*、=a, b, c, +, d, e, -, *, =

演算子のオーバーロードOperator overloading

カスタム クラスやカスタム構造体では、演算子の動作を変更できます。You can change the behavior of operators for custom classes and structs. このプロセスは 演算子のオーバーロードと呼ばれます。This process is referred to as operator overloading. 詳細については、オーバーロード可能な演算子に関する記事および operator キーワードに関する記事を参照してください。For more information, see Overloadable Operators and the operator keyword article.

詳細については、「演算子のキーワード」および「C# 演算子」を参照してください。For more information, see Operator Keywords and C# Operators.

関連項目See also