12
votes

La fonction d'attribut .NET est utilisée lors de la compilation ou du temps d'exécution ou des deux?

in .NET, est la fonction d'attribut utilisé lors de la compilation ou du temps d'exécution ou des deux? Pouvez-vous me donner quelques exemples?


0 commentaires

4 Réponses :


1
votes

Les attributs sont compilés dans le code au moment de la compilation, mais ils sont souvent utilisés au moment de l'exécution comme des déclencheurs pour faire les choses différemment.


0 commentaires

0
votes

Le compilateur ajoute ce qu'on appelle les métadonnées à l'objet décoré avec un attribut. Ces métadonnées, créées via des attributs ou autrement, sont toutes accessibles au temps d'exécution à Thru Réflexion . Ainsi, vous pouvez décorer avec des attributs, puis lire les détails lorsque le programme est en cours d'exécution. Cependant, pour dire que les métadonnées sont "utilisées" au moment de la compilation ne sont pas tout à fait correctes, car le compilateur ne se soucie pas de ce que sont des métadonnées.


2 commentaires

-1: Dans certains cas, des attributs affectent la compilation de manière significative. Par exemple, l'attribut conditionnel est principalement destiné à une utilisation pendant la compilation et peut déclencher des erreurs de compilateur si elle est utilisée de manière incorrecte.


Ouais tu as raison ... j'ai oublié ces cas ... obsolète est une autre.



10
votes

Les attributs sont émis sous forme de métadonnées à l'assemblage à l'heure de la compilation. Ces métadonnées sont ensuite utilisées au moment de l'exécution via la réflexion - par exemple en utilisant getcustomattributes () .

Certains attributs sont utilisés par le compilateur à l'heure de la compilation. Par exemple, le compilateur regarde le attributeUSAGeTribute < / a> Pour déterminer si un attribut peut être utilisé pour un objet spécifique.


1 commentaires

Le compilateur utilise également l'obsolèteattribute à l'heure du compilateur.



15
votes

la plupart sont utilisés uniquement au moment de l'exécution. Un nombre très limité est utilisé par le compilateur, y compris:

  • [conditionnel (...)] - OMIT METHODE Appels par symboles de construction
  • [obsolète (...)] - émet un avertissement / une erreur comme sortie de construction
  • [sérialisable] - est écrit comme un drapeau CLI
  • [extension] - utilisé pour les méthodes d'extension
  • [attributUnage] - affecte comment les attributs sont appliqués -

    Il existe une gamme de choses comme [montageversion] , [montagefileversion] etc. qui sont utilisés par le compilateur lors de la création du fichier d'assemblage et des éléments comme [InternalsVissibleto] qui affectent l'accessibilité.

    En outre, des outils tels que PostSharp font des étapes supplémentaires post-compilées en fonction des attributs.

    Il existe d'autres attributs que le compilateur peut ajouter aux types / méthodes générés (pour des méthodes d'anon / types, des blocs d'itérateurs, etc.).


0 commentaires