C#/CLR が演算子に与える名前の完全なリストを持っている人はいますか? (私の睡眠不足が影響しているのかもしれませんが、Google で見つけられないようです) 例: op_Addition、op_Subtraction。さらに、これらが他の文化で異なる可能性はありますか?
2 つのオブジェクトを加算/減算できるクラスを作成しようとしていますが、すべてのプリミティブを実行しました。あとは「残り」を実行するだけです。
どうもありがとう。
C#/CLR が演算子に与える名前の完全なリストを持っている人はいますか? (私の睡眠不足が影響しているのかもしれませんが、Google で見つけられないようです) 例: op_Addition、op_Subtraction。さらに、これらが他の文化で異なる可能性はありますか?
2 つのオブジェクトを加算/減算できるクラスを作成しようとしていますが、すべてのプリミティブを実行しました。あとは「残り」を実行するだけです。
どうもありがとう。
Expressionクラスに基づく:
== op_Equality
!= op_Inequality
> op_GreaterThan
< op_LessThan
>= op_GreaterThanOrEqual
<= op_LessThanOrEqual
& op_BitwiseAnd
| op_BitwiseOr
+ op_Addition
- op_Subtraction
/ op_Division
% op_Modulus
* op_Multiply
<< op_LeftShift
>> op_RightShift
^ op_ExclusiveOr
- op_UnaryNegation
+ op_UnaryPlus
! op_LogicalNot
~ op_OnesComplement
op_False
op_True
++ op_Increment
-- op_Decrement
C# のオーバーロード可能な演算子の完全なリストは次のとおりです。
オペレーターのメタデータ/生成された MSIL 名のリストは、Framework Design Guidelines -> Operator Overloadsの下にあります。
別のF# operator overload listがあります。
最後に、ECMA-335 Common Language Infrastructure (CLI) I.10.3 Operator overloading を参照してください。C++/CLI の演算子がリストされています。
オーバーロード可能な演算子のリストにリンクしているため、受け入れられた回答は適切ですが、コンパイル時に演算子の名前が提供されないため、厳密には質問に答えません。
次点の回答にはそれが含まれていますが、これは不完全なリストであり、よく整理されていません。完全を期すために、私は独自のリストを作成しました。これには、オーバーロード可能であると思われるがそうではないいくつかの演算子が含まれています。リストは、演算子の優先度の高い (最も厳しい) 優先度から最も低い優先度の順に並べられています。
Outside of Order of Operations (used when necessary to coerce types)
op_Implicit
op_True
op_False
Unary (only one operator)
++ op_Increment (Includes preincrement and postincrement)
-- op_Decrement (Includes predecrement and postdecrement)
- op_UnaryNegation
+ op_UnaryPlus
! op_LogicalNot
~ op_OnesComplement
op_Explicit
await (Not overloadable)
Multiplicative
/ op_Division
% op_Modulus
* op_Multiply
Additive
+ op_Addition
- op_Subtraction
Shift
<< op_LeftShift
>> op_RightShift
Relational
> op_GreaterThan
< op_LessThan
>= op_GreaterThanOrEqual
<= op_LessThanOrEqual
as (Not overloadable)
is (Not overloadable)
Equality
== op_Equality
!= op_Inequality
And
& op_BitwiseAnd
Exclusive Or
^ op_ExclusiveOr
Inclusive Or
| op_BitwiseOr
Conditional And
&& (Not overloadable - use "implicit operator bool" or "operator true")
Contional Or
|| (Not overloadable - use "implicit operator bool" or "operator true")
Null-Coalescing Operator
?? (Not overloadable)
Ternary
?: (Not overloadable - use "implicit operator bool" or "operator true")
Assignment
= (Not overloadable - for combined operator and assignment (such as +=), just use the operator (+))
注: C# コンパイラはimplicit operator bool
、両方が定義されている場合、True および False 演算子の代わりに優先します。
参照されているStackOverflow questionによると、次のメソッド名も C# コンパイラによって発行/理解されますが、
Unary
& op_AddressOf
* op_PointerDereference
Binary
. op_MemberSelection
-> op_PointerToMemberSelection
op_SignedRightShift
op_UnsignedRightShift
= op_Assign
*= op_MultiplicationAssignment
/= op_DivisionAssignment
%= op_ModulusAssignment
-= op_SubtractionAssignment
+= op_AdditionAssignment
<<= op_LeftShiftAssignment
>>= op_RightShiftAssignment
|= op_ExclusiveOrAssignment
&= op_BitwiseAndAssignment
|= op_BitwiseOrAssignment
op_UnsignedRightShiftAssignment
op_SignedRightShiftAssignment
, op_Comma