Le accepté La réponse est bonne car elle renvoie à une liste d'opérateurs surchargeables, mais elle ne répond pas strictement à la question car elle ne fournit pas les noms des opérateurs lorsqu'ils sont compilés. La réponse à la deuxième question inclut cela, mais c'est une liste incomplète et pas bien organisée. Par souci d'exhaustivité, j'ai fait ma propre liste, y compris quelques opérateurs qui pourraient être surchargés mais qui ne le sont pas. La liste est dans l'ordre de priorité des opérateurs, de la priorité la plus élevée (la plus forte) à la plus basse.
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 (+))
Note: Le compilateur C# préfère implicit operator bool
au lieu des opérateurs Vrai et Faux, si les deux sont définis.
Selon une référence StackOverflow question, les noms de méthode suivants sont également émis/compris par le compilateur C#, mais
- j'exécuter des tests dans Visual Studio 2015 et C# 6.0 qui tentent d'obtenir ces au travail, et
- La spécification C# 5.0 répertorie «l'ensemble complet des noms de fonction d'opérateur unaire [et binaire]» (Annexe A, page 469) et ceux-ci n'apparaissent nulle part.
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
Ceci est couvert plus en détail dans http://stackoverflow.com/questions/3016429/reflection-and-operator-overloads-in-c-sharp –