4

C#/CLR が演算子に与える名前の完全なリストを持っている人はいますか? (私の睡眠不足が影響しているのかもしれませんが、Google で見つけられないようです) 例: op_Addition、op_Subtraction。さらに、これらが他の文化で異なる​​可能性はありますか?

2 つのオブジェクトを加算/減算できるクラスを作成しようとしていますが、すべてのプリミティブを実行しました。あとは「残り」を実行するだけです。

どうもありがとう。

4

4 に答える 4

6

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
于 2015-04-07T15:15:36.127 に答える
5

C# のオーバーロード可能な演算子の完全なリストは次のとおりです。

オペレーターのメタデータ/生成された MSIL 名のリストは、Framework Design Guidelines -> Operator Overloadsの下にあります。

別のF# operator overload listがあります。

最後に、ECMA-335 Common Language Infrastructure (CLI) I.10.3 Operator overloading を参照してください。C++/CLI の演算子がリストされています。

于 2009-03-16T05:44:09.793 に答える
4

オーバーロード可能な演算子のリストにリンクしているため、受け入れられた回答は適切ですが、コンパイル時に演算子の名前が提供されないため、厳密には質問に答えません。

次点の回答にはそれが含まれていますが、これは不完全なリストであり、よく整理されていません。完全を期すために、私は独自のリストを作成しました。これには、オーバーロード可能であると思われるがそうではないいくつかの演算子が含まれています。リストは、演算子の優先度の高い (最も厳しい) 優先度から最も低い優先度の順に並べられています。

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# コンパイラによって発行/理解されますが、

  • Visual Studio 2015 と C#6.0 でテストを実行して、これらを機能させようとしました。
  • C#5.0 仕様には、「単項 [および 2 項] 演算子関数名の完全なセット」(付録 A、469 ページ) がリストされていますが、これらはどこにも表示されていません。
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
于 2016-04-12T15:59:20.743 に答える