Comprend pas la mécanique des Attributes - C#/.NET managed - Programmation
Marsh Posté le 24-08-2002 à 11:38:48
kadreg a écrit a écrit : je suis en train d'apprendre C# |
je te crois pas
Marsh Posté le 24-08-2002 à 11:41:25
antp a écrit a écrit : je te crois pas |
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.
Marsh Posté le 24-08-2002 à 11:47:18
c'était pour rire
bah j'ai bien essayé Visual Basic (5 minutes... )
Marsh Posté le 24-08-2002 à 11:51:23
Bah oui mais VB c'est pas un langage, c'est juste une vaste blague.
Marsh Posté le 24-08-2002 à 11:56:32
on va peut-être arrêter de pourrir le topic là
Marsh Posté le 24-08-2002 à 12:01:11
Bon, vous allez pas troller dans mon topic non
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 :
|
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 ?
Marsh Posté le 24-08-2002 à 14:06:58
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 :
|
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.
Marsh Posté le 24-08-2002 à 14:10:22
je me suis en effet rendu compte que j'étais totalement à la rue, c'est pour ça que j'avais effacé
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 )
Marsh Posté le 24-08-2002 à 14:16:03
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
Marsh Posté le 24-08-2002 à 11:37:08
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 ?
---------------
brisez les rêves des gens, il en restera toujours quelque chose... -- laissez moi troller sur discu !