72 votes

Que sont les opérateurs levés?

Je regardais cet article et je suis mal à suivre le VB.NET exemple qui explique la levée des opérateurs. Il ne semble pas être un équivalent exemple en C# ou tutoriel. Je n'ai pas beaucoup d'expérience avec la surcharge d'opérateur, en général, et donc essayer de venir à termes avec la VB.NET l'équivalent, en lisant sur les types nullables n'est probablement pas le meilleur endroit pour commencer...

Quelqu'un serait-il en mesure de fournir une explication de la levée des opérateurs et la façon dont ils sont utilisés par les types nullables? Est-il juste de dire que le type nullable n'a pas lui-même la surcharge des opérateurs, et d'utiliser les opérateurs du type sous-jacent qu'il représente?

Il ne semble pas être beaucoup d'informations sur de SORTE à propos de la levée des opérateurs, donc j'espère que cela peut aider certains d'autres trop.

Merci

139voto

Jon Skeet Points 692016

Levé opérateurs sont des opérateurs qui travaillent sur les types nullables par "lever" les opérateurs qui existent déjà sur le non nullable forme. Ainsi, par exemple, si vous ne:

int? x = 10;
int? y = 10;
int? z = x + y;

Que l'opérateur "+" est levé. Il n'existe pas réellement sur Nullable<int> mais le compilateur C# qui agit comme si elle n', la génération de code pour faire la bonne chose. (Pour la plupart des cas, c'est une question de vérifier si l'un des deux opérandes est nulle; si oui, le résultat est null. Sinon, déballer les deux opérandes de leur non nullable des valeurs, de l'utilisation normale de l'opérateur, puis les envelopper le résultat dans un nullable valeur. Il y a quelques cas particuliers autour de comparaisons cependant).

Voir la section 6.4.2 (levée d'opérateurs de conversion) et 7.3.7 (levée opérateurs) de la C# 4 spec pour plus d'informations.

5voto

ho1 Points 31752

Je suggérerais de regarder les spécifications ECMA pour C #, cela explique assez bien ce qu'est un opérateur levé. ECMA-334: 14.2.7 Opérateurs levés

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X