Имена методов для методов оператора в C # - PullRequest
2 голосов
/ 16 марта 2009

Есть ли у кого-нибудь исчерпывающий список имен, которые C # / CLR дает операторам? (Может быть, у меня не хватает сна, но я не могу найти его в Google) Например. op_Addition, op_Subtraction. Кроме того, есть ли вероятность, что они будут другими в других культурах?

Я пытаюсь создать класс, который может сложить / вычесть и т. Д. Два объекта, и я выполнил все примитивы - мне просто нужно сделать «остальное».

Большое спасибо.

Ответы [ 4 ]

5 голосов
/ 07 апреля 2015

На основе выражения класс:

== 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
4 голосов
/ 16 марта 2009

Вот полный список C # перегружаемых операторов

Список операторов Metadata / Generated MSIL можно найти в разделе Руководство по проектированию платформы -> Перегрузки операторов .

Существует другой список перегрузки F # оператора .

Наконец, обратитесь к Общий язык ECMA-335 Инфраструктура (CLI) I.10.3 Перегрузка операторов, в которой перечислены операторы для C ++ / CLI.

3 голосов
/ 12 апреля 2016

Принятый ответ хорош, потому что он ссылается на список перегружаемых операторов, но он не дает точного ответа на вопрос, потому что он не предоставляет имена операторов при их компиляции.

Ответ занял второе место, но это неполный список и не очень хорошо организован. Для полноты картины я составил свой собственный список, включающий несколько операторов, которые вы, возможно, ожидаете перегрузить, но это не так. Список находится в порядке приоритета операторов, от самого высокого (самого узкого) приоритета до самого низкого.

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 вопросу , следующие имена методов также выводятся / понимаются компилятором C #, но

  • Я запустил тесты в Visual Studio 2015 и C # 6.0, пытаясь заставить их работать, и
  • В спецификации C # 5.0 перечислен «полный набор имен унарных [и двоичных] операторных функций» (Приложение 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
0 голосов
/ 17 февраля 2014

Этот веб-сайт предоставляет список имен для операторов C #, отображающий оператор, Действие (имя), Пример и результат: Список операторов C #

...