2009-03-16 10 views
2

Est-ce que quelqu'un a une liste exhaustive des noms que C#/CLR donne aux opérateurs? (Peut-être mon manque de sommeil commence-t-il, mais je n'arrive pas à le trouver sur Google) E.g. op_Addition, op_Subtraction. En outre, y a-t-il une chance que ceux-ci soient différents dans d'autres cultures? J'essaye de créer une classe qui peut ajouter/soustraire deux objets et j'ai fait toutes les primitives - j'ai juste besoin de faire le 'reste'.Noms de méthodes pour les méthodes d'opérateur en C#

Merci beaucoup.

+0

Ceci est couvert plus en détail dans http://stackoverflow.com/questions/3016429/reflection-and-operator-overloads-in-c-sharp –

Répondre

4

Voici la liste complète des overloadable operators from MSDN.

--- EDIT ---

En réponse à votre commentaire, je crois ce que vous voulez is here. Rechercher Tableau 6-1.

+0

Je sais, mais je dois les noms des méthodes réelles dans l'assemblage final, comme op_Addition ... Peut-être que j'irai les implémenter tous et réfléchir. –

+0

Jonathan, je crois que le nouveau lien ci-dessus a ce que vous voulez. –

+0

parfait! Merci beaucoup! –

0

Ce site donne la liste des noms pour les opérateurs C#, l'affichage de l'opérateur, action (nom), Exemple & Résultat: C# Operator List

3

Basé sur le Expression Classe:

== 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 
2

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 
+0

C'est vraiment intéressant, je suppose que ces noms d'opérateurs sont compris à cause de C++/CLI. J'ai récemment vérifié l'IL d'un assemblage en mode mixte, et ces noms sont utilisés pour les classes compilées en code managé. – IllidanS4

Questions connexes