Comment créer un attribut personnalisé en C#
J'ai essayé des tas de fois, mais encore je ne suis pas en mesure de comprendre l'utilisation d'attributs personnalisés (j'ai déjà vécu beaucoup de liens).
Quelqu'un peut-il m'expliquer un exemple très simple d'un attribut personnalisé avec code?
Vous devez vous connecter pour publier un commentaire.
Tout le code pour créer un personnalisé Attribut est assez simple, il est important que vous sachiez quels sont les attributs:
Attributs de métadonnées compilé dans votre programme. Les attributs eux-mêmes ne pas ajouter des fonctionnalités à une classe, d'une propriété ou d'un module, juste des données. Cependant, l'utilisation de la réflexion, on peut tirer parti de ces attributs afin de créer une fonctionnalité.
Ainsi, par exemple, regardons La Validation De Bloc D'Application, de L'Entreprise De La Bibliothèque. Si vous regardez un exemple de code, vous verrez:
De l'extrait ci-dessus, on peut deviner que le Code sera toujours validée, chaque fois que modifié, en conséquence les règles du programme de validation (dans l'exemple, avoir au moins 8 caractères et au plus 8 caractères). Mais la vérité est que l'Attribut ne fait rien, ne fait qu'ajouter des métadonnées à la propriété.
Cependant, la Bibliothèque d'Entreprise a un
Validation.Validate
méthode que votre objet, et pour chaque propriété, il va vérifier si le contenu viole la règle informé par l'attribut.Donc, c'est comment vous devriez penser à des attributs, un moyen d'ajouter des données à votre code qui peut être utilisé plus tard par d'autres méthodes/classes/etc.
Vous commencez par écrire une classe qui dérive de Attribut:
Alors vous pouvez décorer n'importe quoi (classe, méthode, propriété, ...) avec cet attribut:
et enfin vous utiliser la réflexion pour aller la chercher:
Vous pouvez limiter les types de cibles à qui cet attribut personnalisé pourrait être appliqué à l'aide de la AttributeUsage attribut:
Choses importantes à savoir sur les attributs:
var value = typeof(Foo).GetCustomAttributes<MyCustomAttribute>().First().SomeProperty;
Utilisant/Copie Darin Dimitrov est super réponse, c'est comment accéder à un attribut personnalisé sur une propriété et non une classe:
Décoré de la propriété [de classe
Foo
]:Aller chercher il:
Vous pouvez jeter cela dans une boucle et utiliser la réflexion pour accéder à cet attribut personnalisé sur chaque propriété de la classe
Foo
, ainsi:Majeure grâce à vous, Darin!!
object[] attribute = propertyInfo.GetCustomAttributes(typeof(???), true);
Je veux juste pour itérer sur tous les d'eux, et appeler une méthodem1()
de chaque attribut inconnu