Cela n'affecte System.ComponentModel d'utilisation (pas de reflet direct), mais c'est assez souvent - par exemple, vous pouvez associer une TypeConverter via la ci-dessus.
Si par "attributs" tu veux dire "propriétés", puis (encore une fois, comme la mesure de la liaison de données) TypeDescriptor aussi a du potentiel, mais c'est non-trivial; vous devez soit mettre en œuvre ICustomTypeDescriptor sur l'objet, ou d'écrire un CustomTypeDescriptor pour le type - et dans les deux cas, vous devez écrire votre propre PropertyDescriptor de mise en œuvre (souvent parler par exemple de dictionnaire, etc). Ce sera utilisée par tout ce qui utilise:
//only works if you use TypeDescriptionProviderPropertyDescriptorCollection typeProps =TypeDescriptor.GetProperties(type);//works via TypeDescriptionProvider or ICustomTypeDescriptorPropertyDescriptorCollection objProps =TypeDescriptor.GetProperties(obj);
Encore une fois, cela couvre un large éventail de liaison de données et les scénarios similaires. Pour un exemple de cette, voir ici - il est loin d'être négligeable, cependant. L'exemple d'utilisation (à partir du lien) ajoute deux propriétés au moment de l'exécution:
Edit: préciser, parlez-vous de c# attributs ou des membres de votre classe?
La seule façon vous pouvez ajouter les attributs c# est de générer une classe entièrement nouvelle avec les attributs supplémentaires, compiler et charger la nouvelle assemblée à votre domaine d'application.
Et en classe, il signifie un tout nouveau type, pas seulement une autre instance de la même classe. tout à fait raison, je peux voir, il pourrait être un peu ambiguë. Merci
Utiliser une table de hachage pour stocker vos attributs.
Si vous voulez plus de temps d'exécution de flexibilité, vous pouvez essayer de Ruby ou de quelque autre langage interprété.
s/interprété/dynamique/. Ruby, PHP et Python sont dynamiques. C#, Java, VB sont statiques. Je pense que tu veux dire dynamique de la langue... Bien sûr, un bon point. Toute langue peut être compilé, et aucune langue ne peut être interprété. Juste une étrange coïncidence que Ruby, PHP et Python sont généralement interprétées et C#, Java, VB, compilées... J'ai vu compilé Python. Et VB utilisé pour être interprété à l'époque (EXE permettrait d'intégrer le code dans le fichier exe avec un interprète). Yep, compilé vs non-compilé n'est pas très intéressant de différenciation. Mon mauvais.
Attributs font partie de la méta-données d'un type, et donc, ils sont codés en dur dans l'assembly compilé (c'est aussi pourquoi vous n'êtes autorisé à utiliser certains types primitifs et non arbitraire de données sur les attributs).
La conséquence est que vous ne pouvez pas ajouter des attributs à un type à l'exécution. Mais il existe plusieurs autres techniques. Vous pouvez utiliser de simples dictionnaires ou quelque chose de plus puissant comme attaché propriétés de dépendance.
Ce qui doit voir les attributs? Si c'est des choses comme de liaison de données etc,
TypeDescriptor
devrait fonctionner:Cela n'affecte
System.ComponentModel
d'utilisation (pas de reflet direct), mais c'est assez souvent - par exemple, vous pouvez associer uneTypeConverter
via la ci-dessus.Si par "attributs" tu veux dire "propriétés", puis (encore une fois, comme la mesure de la liaison de données)
TypeDescriptor
aussi a du potentiel, mais c'est non-trivial; vous devez soit mettre en œuvreICustomTypeDescriptor
sur l'objet, ou d'écrire unCustomTypeDescriptor
pour le type - et dans les deux cas, vous devez écrire votre proprePropertyDescriptor
de mise en œuvre (souvent parler par exemple de dictionnaire, etc). Ce sera utilisée par tout ce qui utilise:Encore une fois, cela couvre un large éventail de liaison de données et les scénarios similaires. Pour un exemple de cette, voir ici - il est loin d'être négligeable, cependant. L'exemple d'utilisation (à partir du lien) ajoute deux propriétés au moment de l'exécution:
OriginalL'auteur Marc Gravell
Edit: préciser, parlez-vous de c# attributs ou des membres de votre classe?
La seule façon vous pouvez ajouter les attributs c# est de générer une classe entièrement nouvelle avec les attributs supplémentaires, compiler et charger la nouvelle assemblée à votre domaine d'application.
tout à fait raison, je peux voir, il pourrait être un peu ambiguë. Merci
OriginalL'auteur Rex M
Utiliser une table de hachage pour stocker vos attributs.
Si vous voulez plus de temps d'exécution de flexibilité, vous pouvez essayer de Ruby ou de quelque autre langage interprété.
Je pense que tu veux dire dynamique de la langue...
Bien sûr, un bon point. Toute langue peut être compilé, et aucune langue ne peut être interprété. Juste une étrange coïncidence que Ruby, PHP et Python sont généralement interprétées et C#, Java, VB, compilées...
J'ai vu compilé Python. Et VB utilisé pour être interprété à l'époque (EXE permettrait d'intégrer le code dans le fichier exe avec un interprète).
Yep, compilé vs non-compilé n'est pas très intéressant de différenciation. Mon mauvais.
OriginalL'auteur Bill K
Prendre un coup d'oeil à l'Dynamic Language Runtime. Vous pourriez également envisager un langage dynamique comme IronRuby ou IronPython.
Ce problam essayez-vous de résoudre?
http://en.wikipedia.org/wiki/Dynamic_Language_Runtime
OriginalL'auteur Ralph Trickey
Attributs font partie de la méta-données d'un type, et donc, ils sont codés en dur dans l'assembly compilé (c'est aussi pourquoi vous n'êtes autorisé à utiliser certains types primitifs et non arbitraire de données sur les attributs).
La conséquence est que vous ne pouvez pas ajouter des attributs à un type à l'exécution. Mais il existe plusieurs autres techniques. Vous pouvez utiliser de simples dictionnaires ou quelque chose de plus puissant comme attaché propriétés de dépendance.
OriginalL'auteur Thomas Danecker
Je voudrais aller avec PostSharp, un très élégant AOP cadre (ou de la Politique d'Injection de).
PostSharp vous permet d'injecter des attributs personnalisés.
L'entrée de blog référencé dans le post a un peu de code que vous pouvez télécharger pour atteindre votre objectif.
OriginalL'auteur Renaud Bompuis
Ce post répondu présent pour moi:
La Création dynamique des Types à l'Exécution
OriginalL'auteur Josh