Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Custom attribute - Fonctionnement [ Système / Autre ] (t00f)

mercredi 11 juin 2008 à 13:00:34 | Custom attribute - Fonctionnement

t00f

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 ...

    }

mercredi 11 juin 2008 à 13:47:57 | Re : Custom attribute - Fonctionnement

leprov

Réponse acceptée !
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



mercredi 11 juin 2008 à 14:01:33 | Re : Custom attribute - Fonctionnement

t00f

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{

              }
          }
    }

mercredi 11 juin 2008 à 14:06:35 | Re : Custom attribute - Fonctionnement

t00f

J'ai oublié de préciser que je voulais sortir le traitement long de la méthode get :)


mercredi 11 juin 2008 à 14:26:23 | Re : Custom attribute - Fonctionnement

leprov

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?)



mercredi 11 juin 2008 à 14:38:26 | Re : Custom attribute - Fonctionnement

t00f

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...

mercredi 11 juin 2008 à 15:32:56 | Re : Custom attribute - Fonctionnement

Nikoui

Ce que tu cherches a faire relève de l'AOP (Aspect Oriented Programming), regardes par exemple du côté de Postsharp, tu devrais trouver ton bonheur :

Postsharp


Working as designed
www.nikoui.fr

mercredi 11 juin 2008 à 16:54:56 | Re : Custom attribute - Fonctionnement

leprov

pourquoi ne pas juste appeler une méthode? qu'est ce qui te gene dans cette facon de faire sachant que ton traitement sera effectivement fait?

class Toto{
        
          private string name;

          public String Name{
             get{
                   PerformTruc();
                   .... ?
                   // Renvoyer name;
                   return this.name;
             }
             set{

              }
          }
    }


mercredi 11 juin 2008 à 18:30:58 | Re : Custom attribute - Fonctionnement

t00f

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.




mercredi 11 juin 2008 à 19:55:21 | Re : Custom attribute - Fonctionnement

leprov

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




1 2

Cette discussion est classé dans : méthode, fonctionnement, attribut, custom, attribute


Répondre à ce message

Sujets en rapport avec ce message

[.net2] recherche d'un attribut [ par Willi ] Bonjour CSharpiens et CSharpiennes Il y a l'attribut obsolete pour informer que tel ou tel méthode ou propriété n'est pas conseillé à utiliser.Mais ex Assembly: custom attributes [ par jusob ] Bonjour, j'utilise des custom attributes du genre: [assembly:AssemblyTitle("First plugin")] [assembly:AssemblyCompany("MySelf")] [assembly:Assemb Problème de changement de valeur dans un attribut avec XPathNodeIterator [ par The Red Man ] Salut à tous !Je suis confronté a un problème que j'arrive pas a résoudre. En effet, je n'arrive pas ou plutot je ne peut pas modifier la valeur d'un Compilation personnalisée pour un attribut [ par Julien237 ] Bonjour,Je cherche un moyen de compiler moi-même les membres marqués par un attribut donné.Exemple simpliste :[AllwaysReturn(5)]public int Method(...) Reflection sur une méthode statique [ par t00f ] Bonjour à tous,Je viens vers vous pour une question concernant la réflection.Lorsque j'appelle une méthode normalement (non statique) je peux récupére remplir une DropDownList [ par sofiesofie ] bonsoir, j'ai une méthode dans un web service qui retourne une datatable;dans ma webform j'ai récupérer les données retournées par la méthode dans une Récupérer la valeur d'un attribut en fournissant son nom en paramètre [ par youssef_souissi ] j'ai une méthode qui prend en paramètre un objet de type Object. Cet objet peut être une instance de la classe "Client" ou "Fournisseur" par exemple. Question sur le passage de paramètres différents dans une méthode [ par seb123 ] Bonjour,J'aimerai savoir comment discerner les paramètres que l'on passe dans une méthode ?Exemple ci-dessous.J'aimerai pouvoir dire que l'argument 1 Récupérer la description d'une méthode "summary" [ par bmouget ] Bonjour,Aprés chargement d'une Assembly, je voudrais récupérer la description d'une fonction, celle que l'on saisi dans /// .Voici mon code :         binary [ par amel227 ] Bonjour à tousje veux inserer une valeur X (définie sur mon programme c#) dans un attribut de type binary dans ma base mysql.Quel type je peux définir


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,265 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.