Est-il possible d'ajouter des attributs à l'exécution ou de modifier la valeur d'un attribut lors de l'exécution?
Réponses
Trop de publicités?Cela dépend vraiment de ce que vous essayez d'accomplir.
Le Système De.ComponentModel.TypeDescriptor des choses peut être utilisé pour ajouter des attributs de types, propriétés et des instances de l'objet, et a la limite que vous avez à l'utiliser pour récupérer ces propriétés. Si vous écrivez le code qui utilise ces attributs, et vous pouvez vivre à l'intérieur de ces limites, alors je serais certainement le suggérer.
Autant que je sache, la grille des propriétés de contrôle et de la conception de visual studio surface sont les seules choses dans la BCL qui consomment le TypeDescriptor choses. En fait, c'est comment ils font environ la moitié des choses qu'ils ont vraiment besoin de le faire.
Les attributs sont des métadonnées statiques. Les assemblys, modules, types, membres, paramètres et valeurs de retour ne sont pas des objets de première classe dans C # (par exemple, la classe System.Type est simplement une représentation réfléchie d'un type). Vous pouvez obtenir une instance d'un attribut pour un type et modifier les propriétés si elles sont accessibles en écriture, mais cela n'affecte pas l'attribut tel qu'il est appliqué au type.
Eh bien, juste pour être différent, j'ai trouvé un article qui fait référence à l'aide de Reflection.Emit de le faire.
Voici le lien: http://www.codeproject.com/KB/cs/dotnetattributes.aspx , vous voudrez également examiner certains des commentaires au bas de l'article, car les approches possibles sont discutées.