10
votes

C # Enums avec attribut des drapeaux

Je me demandais si Enums avec l'attribut du drapeau est principalement utilisé pour les opérations bitwises, pourquoi pas les compilateurs autogénèrent les valeurs si les valeurs ENUM ne sont pas définies.

pour par exemple, P>

[Flags]
public enum MyColor
{
    Yellow = 1,
    Green = 2,
    Red = 4,
    Blue = 8
}


0 commentaires

4 Réponses :


3
votes

Ils pourraient probablement, mais avec un compilateur de cette taille, ils doivent prendre en compte le temps et les ressources nécessaires à la mise en œuvre de quelque chose à l'avantage potentiel, en particulier avec le sucre syntaxique comme celui-ci. Et ce n'est que du sucre syntaxique parce que vous pouvez l'écrire manuellement.


0 commentaires

13
votes

Ceci est un peu plus facile: xxx


3 commentaires

Cela vous évite de calculer la prochaine valeur disponible


Qu'est-ce que pseudo anglais pour 1 << 0?


"Un bit-décalé vers la gauche zéro fois"



3
votes

Je m'attends à ce que l'instance FlagsAttribute est compilée à côté ou après, l'énum. C'est-à-dire que décorer un objet avec un Atribute (comme [drapeaux]) provoque la création d'un objet d'attribut, il ne modifie pas l'objet de base de manière fondamentale.

En outre, une partie des informations stockées (pour l'instanciation de temps d'exécution de l'attribut) est l'entité à laquelle elle se réfère. Il se peut que l'entité Enum doit être compilée avant ses attributs. Un attribut n'a pas pu affecter l'entité qu'elle fait référence à (dans ce cas enum). Je ne sais pas que cette déclaration soit vraie, c'est juste une supposition.

La grande prise à emporter est les attributs, tels que [drapeaux], sont en réalité des entités elles-mêmes et non des modifications du type décoré.


0 commentaires

2
votes

Je pense que cela, entre autres choses, bouillirait à la confusion massive de la première valeur. Considérons: xxx

Lorsqu'une classe est instanciée, tous ses champs sont normalement mis à zéro (les références deviennent nulles et les valeurs deviennent zéro). Mais si la première valeur serait une, alors le compilateur devra gérer le drapeau enums différemment de rien d'autre.

Donc, en considérant cela, et aussi le fait qu'il soit très utile de pouvoir être égal à zéro Un bitfield, nous arrivons à la conclusion que le premier champ devrait en réalité être logiquement de zéro: xxx

mais je suppose que peu de gens se rendraient compte ceci (sans les commentaires ci-dessus). Et plus de choses difficiles se poseraient aussi: xxx

probablement mieux pour l'épeler explicitement pour éviter une confusion massive! : -)


0 commentaires