Принятый ответ хорош, потому что он ссылается на список перегружаемых операторов, но он не дает точного ответа на вопрос, потому что он не предоставляет имена операторов при их компиляции.
Ответ занял второе место, но это неполный список и не очень хорошо организован. Для полноты картины я составил свой собственный список, включающий несколько операторов, которые вы, возможно, ожидаете перегрузить, но это не так. Список находится в порядке приоритета операторов, от самого высокого (самого узкого) приоритета до самого низкого.
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