Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
6191 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Comprend pas la mécanique des Attributes

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Comprend pas la mécanique des Attributes

n°201171
kadreg
profil: Utilisateur
Posté le 24-08-2002 à 11:37:08  profilanswer
 

Bonjour,
 
je suis en train d'apprendre C#, et il y a un truc qui me semble cryptique : la notion d'Attribute (17.2 dans la c# specification, pas l'attribut dans qu'on le connais en java et c++ donc).
 
Dans mon code, je déclare un nouveau type d'attribut TestAttribute contenant une propriété int.
 
Je l'applique sur ma classe Hello en l'initialisant à 10.
 
Et dans la fonction main, je tente de l'utiliser. Ca ne compile même pas.
 
Il me semblais avoir compris qu'un attribute était une déclaration d'attibut de haut niveau, que l'on pouvait ensuite insérer dans une classe. C'est bien le cas ? Et comment ça s'utilise exactement ?
 

Code :
  1. using System;
  2. namespace Hello{
  3.   [AttributeUsage(AttributeTargets.Class)]
  4.   public class TestAttribute : Attribute {
  5.     public TestAttribute (int i) {
  6.       Truc = i;
  7.     }
  8.     private int truc;
  9.     public int Truc {
  10.       get {
  11. return truc;
  12.       }
  13.       set {
  14. truc = value;
  15.       }
  16.     }
  17.   }
  18.   [TestAttribute(10)]
  19.   class Hello {
  20.     public Hello () {
  21.      
  22.     }
  23.    
  24.     private string prop = "";
  25.     public string Prop {
  26.       get {
  27. return prop;
  28.       }
  29.       set {
  30. prop = value;
  31.       }
  32.     }
  33.    
  34.     static int Main (string[] args) {
  35.       Hello hello = new Hello ();
  36.       System.Console.WriteLine ("Hello : begin {0}", hello.Prop);
  37.       hello.Prop = "coin ! coin ! ";
  38.       System.Console.WriteLine ("Hello : end {0}", hello.Prop);
  39.       System.Console.WriteLine ("Valeur attribute Truc : {0}", hello.Truc);
  40.       return 0;
  41.     }
  42.   } 
  43. }


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
mood
Publicité
Posté le 24-08-2002 à 11:37:08  profilanswer
 

n°201172
antp
Super Administrateur
Champion des excuses bidons
Posté le 24-08-2002 à 11:38:48  profilanswer
 

kadreg a écrit a écrit :

 
je suis en train d'apprendre C#




 
:ouch: je te crois pas :D


Message édité par antp le 24-08-2002 à 11:38:56

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°201174
kadreg
profil: Utilisateur
Posté le 24-08-2002 à 11:41:25  profilanswer
 

antp a écrit a écrit :

 
:ouch: je te crois pas :D




 
Pourquoi ? Un peu de culture ne fait pas de mal. Je travaille en java/J2EE/EJB, et être capable d'avoir des points de comparaisons avec les systèmes concurents est important.


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°201179
antp
Super Administrateur
Champion des excuses bidons
Posté le 24-08-2002 à 11:47:18  profilanswer
 

c'était pour rire ;)
bah j'ai bien essayé Visual Basic (5 minutes... :D)


Message édité par antp le 24-08-2002 à 11:47:41

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°201182
gm_superst​ar
Appelez-moi Super
Posté le 24-08-2002 à 11:51:23  profilanswer
 

Bah oui mais VB c'est pas un langage, c'est juste une vaste blague.

n°201184
antp
Super Administrateur
Champion des excuses bidons
Posté le 24-08-2002 à 11:56:32  profilanswer
 

:D
on va peut-être arrêter de pourrir le topic là [:titprem]


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°201187
kadreg
profil: Utilisateur
Posté le 24-08-2002 à 12:01:11  profilanswer
 

Bon, vous allez pas troller dans mon topic non [:tapai]
 
Bon, je crois avoir compris. Les attributs de ce types sont définis au niveau de la metaclasse, et il faut jouer de la reflexivité pour y acceder.
 

Code :
  1. System.Reflection.MemberInfo info = typeof(Hello);
  2.       object[] attributes = info.GetCustomAttributes(true);
  3.       for (int i = 0; i < attributes.Length; i ++) {
  4.          System.Console.WriteLine("Attribute ", attributes[i]);
  5.       }


 
Par contre, ces attributs ne sont instanciés que lorsque l'on tente d'y acceder par getCustomAttributes. Bizarre comme truc. Quelqu'un sait dans quels cas on utilise ce type de système ?


Message édité par kadreg le 24-08-2002 à 12:01:39

---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°201232
kadreg
profil: Utilisateur
Posté le 24-08-2002 à 14:06:58  profilanswer
 

Je capte pas vraiment ce que t'as tenté de faire dans ton code... :??:
 
Comprendre comment ça marche et à quoi ça sert :)
 
Donc, déclarer un attribute (TestAttribute) pour linstancier dans la classe Hello.
 
Déjà, à aucun moment tu initialises la valeur de ton attribut avec un .set()
 
La ligne [TestAttribute(10)]  est sensée créer et initialiser cet attribut. D'ailleurs, elle le fait, si je met une trace sans l'accesseur en ecriture de truc, je vois l'initialization.
 
 
Et ensuite, pour récupérer, tu n'a pas surchargé la méthode par défaut, donc il ne peux pas inventer que tu veux un .get(), donc il lits direct dans la valeur, et vu qu'elle n'est pas initialisée, ça ne peux pas marcher.
 
C'est une propriétée. La valeur est contenue dans truc, mais j'ai déclarée une propriétée Truc qui me permet d'y acceder proprement.
 
PS: Un type d'attribut avec un .set et un .get, généralement, sa valeur est privée, sinon ça sert à rien ;)
 
C'est une propriété, l'appel à set/get est donc sous entendu. Si je fait Truc = 3, Ca appel setTruc (3) qui affecte 3 à truc.
 
Et aussi... A quel moment tu dis que "Prop" ou "Truc" est un attribut :??:
 

Code :
  1. private string prop = "";
  2.    public string Prop {
  3.      get {
  4.         return prop;
  5.      }
  6.      set {
  7.         prop = value;
  8.      }
  9.    }


 
Parceque là, je trouve ça bizarre
 
Moi aussi j'ai du mal a comprendre ce qui se passe. Mais la question porte sur l'utilisation de Truc dans une instance de Hello.


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°201236
MagicBuzz
Posté le 24-08-2002 à 14:10:22  profilanswer
 

je me suis en effet rendu compte que j'étais totalement à la rue, c'est pour ça que j'avais effacé :D
 
désolé je n'utilise jamais ça.
ça sert à koi exactement de déclarer tes attributs comme ça ?
 
car il me semble que tu peux surcharger la lecture d'un atribut de base (une simple variable public) dans une class par des methodes qui font les tests de validité nécessaires (me souvient plus comment par contre :D)


Message édité par MagicBuzz le 24-08-2002 à 14:11:33
n°201238
kadreg
profil: Utilisateur
Posté le 24-08-2002 à 14:16:03  profilanswer
 

MagicBuzz a écrit a écrit :

 
ça sert à koi exactement de déclarer tes attributs comme ça ?




 
C'est aussi ce que je me demande. J'ai l'impression que ce type d'attributs (qui sont sur la metaclasse) sont destinés à des modifications dynamiques de métaclasses (comme en smalltalk). Mais je ne voit pas ce que ça fait en page 86 d'un livre introduction sur c# dans ce cas.
 
J'ai envie d'envoyer un mail à l'auteur du livre pour savoir si il a compris ce qu'il a écrit :D


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
mood
Publicité
Posté le 24-08-2002 à 14:16:03  profilanswer
 

n°201240
MagicBuzz
Posté le 24-08-2002 à 14:19:56  profilanswer
 

Ben bon courage :D :pt1cable:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Comprend pas la mécanique des Attributes

 

Sujets relatifs
metode hashCode de String ... je comprend pas ![PHP] Expressions régulières je comprend rien!!! ;-)
Les exceptions, y a une truc que j'comprend pas.erreur en Vbscript je ne comprend pas du tout pourquoi!!
[open gl] je ne comprend pas mes erreurs pour ma geosphère (tjs pas)HELPPP je comprend pas le javascript!
J'comprend pas[PHP] alors la je comprend pas !!
[PHP] erreur que je ne comprend pas...[MFC] CFileDialog qui me retourne -1 ?! Comprend pas bien...
Plus de sujets relatifs à : Comprend pas la mécanique des Attributes


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)