t00f
Messages postés64Date d'inscriptionlundi 21 avril 2008StatutMembreDernière intervention23 octobre 2009
-
11 juin 2008 à 13:00
t00f
Messages postés64Date d'inscriptionlundi 21 avril 2008StatutMembreDernière intervention23 octobre 2009
-
13 juin 2008 à 16:49
Bonjour à tous,
J'aimerais en savoir plus sur l'utilisation des custom attributes ( la documentation Msdn est assez pauvre à ce niveau, enfin je trouve !)
Voilà j'aimerais savoir si :
- l'attribut est executé avant la méthode qui le porte ?
- Comment appeller une fonction spéciale de l'attribut ?
- Peut-on intéragir avec un élément de la méthode / propriété ?
Exemple : Si j'ai un attribut personnalisé customAttribute qui possède une méthode modify(), comment faire pour appeller la méthode modify avant que le code de MyMethod ne soit executé ?
[customAttribute()]
public int MyMethod(...) {
// Code ...
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 11 juin 2008 à 13:47
L'attribut n'est pas executé. je pense que tu n'as pas bien compris ce que sont les attributs en fait.
L'attribut permet simplement d'associer des métadonnées a la portion de code sur laquelle il porte. Ainsi, ton code exemple ne fais qu'appliquer la métadonnée "mymethod possède en tant que métadonnées, dans le code compilé, une instance de customattribute, ne contenant pas d'autre data que le simple fait que cet attribut est présent".
Ainsi, cest uniquement du code personnalisé qui va te permettre de réagir a la présence ou non de ton attribut (et de traiter les données potentielles de ton attribut). Ton seul moyen de faire qqch de cet attribut est d'avoir a un endroit, une méthode personnalisée, qui recherche les méthodes portant cet attribut par réflexion, et d'executer un code perso.
Typiquement, lorsque tu va, par exemple, mettre l'attribut "category" sur une propriété d'un objet graphique, cela ne fait qu'indiquer qu'une category existe sur ta propriété. si tu veux l'utiliser libre a toi. cependant, l'objet utilisé par le designer (et que tu peux utiliser par ailleurs) qui affiche les propriétés de ton objet se sert de cette propriété. tout simplement, lorsque le tableau des propriétés est chargé, il a une méhtode qui dit "je cherche les propriétés possédant l'attribut category, et je range mes propriétés en fonction de ceci dans mon affichage". mais cest tout.
bref, tes custom attributes ne te permettent que d'avoir des métadonnées utiles pour la reflexion
t00f
Messages postés64Date d'inscriptionlundi 21 avril 2008StatutMembreDernière intervention23 octobre 2009 11 juin 2008 à 14:01
D'accord, je comprends mieux l'utilité de l'attribute !
En fait, je pensais utiliser un attribut pour pouvoir, lors d'un appel à une propriété, effectuer un traitement spécial. Y'aurait-il un moyen pour faire cela (sans les attributs bien sûr) ?
Exemple :
class Toto{
private string name;
public String Name{
get{
// Effectuer un long traitement générique sur name
.... ?
// Renvoyer name;
return this.name;
}
set{
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 11 juin 2008 à 14:26
je ne comprend pas ce que tu cherche a faire...pourquoi ne pas tout betement appeler une méthode pour ton traitement long? pour ce que tu veux faire tu ne pourras pas utiliser les attributs (et meme si tu pouvais, quel interet particulier de le faire?)
Vous n’avez pas trouvé la réponse que vous recherchez ?
t00f
Messages postés64Date d'inscriptionlundi 21 avril 2008StatutMembreDernière intervention23 octobre 2009 11 juin 2008 à 14:38
J'aimerais répondre à un événement.
Du genre, si mon utilisateur fait un get, que le système s'arrange d'abord pour effectuer un traitement (transparent au développeur) qui charge des données, enregistre quelque chose ou autre.
En fait, je sais qu'au niveau de la sérialisation personnalisée, en utilisant l'attribut serializing, le système comprends qu'il doit utilisé la fonction pendant qu'il est en train de sérialiser. Je pensais essayer de faire un peu la même chose...
t00f
Messages postés64Date d'inscriptionlundi 21 avril 2008StatutMembreDernière intervention23 octobre 2009 11 juin 2008 à 18:30
Très Très intéressant ce PostSharp ! Merci beaucoup ;)
Vu que je suis un peu chiant sur les bords, je vais pas dire que pour l'instant, qu'il ne supporte pas le compact framework. Je vais essayer de mon côté voir s'il y'a des choses à faire.
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 11 juin 2008 à 19:55
tu n'as toujours pas répondu a ma question : pourquoi ne peux tu pas simplement appeler une méthode? je ne vois absolument pas le soucis que tu rencontres
t00f
Messages postés64Date d'inscriptionlundi 21 avril 2008StatutMembreDernière intervention23 octobre 2009 13 juin 2008 à 16:49
Je chercher à développer un framework complètement transparent à l'utilisateur. Je ne peux donc pas me permettre de dire à l'utilisateur d'appeller explicitement une fonction.