Si vous avez déjà fait de la Reflection alors vous connaissez surement la méthode GetCustomAttributes(bool inherit) de la classe MemberInfo qui permet de retrouver la liste des attributs d’un membre d’un type.
Comme vous vous en doutez le paramètre booléen inherit permet d’indiquer au framework s’il doit rechercher également dans les types de base (du style vous avez une propriété abstraite avec des attributs dans la classe de base, et cette propriété est « overridée » dans une classe fille).
Vous écrivez le code d’appel à la méthode GetCustomAttributes, vous exécutez et vous remarquez que l’attribut de la classe de base n’est pas trouvé.
Un petit tour sur la msdn : http://msdn.microsoft.com/en-us/library/kff8s254.aspx
D’après la msdn voici à quoi sert le paramètre booléen inherit :
C’est donc bien ce que nous avions compris… le booléen permet d’indiquer que l’on veut également récupérer les attributs du membre des types de base.
L’exemple donné sur la msdn confirme bien l’utilisation de ce paramètre :
Là je me pose la question : c’est quoi l’arnaque ? Qu’est-ce que j’ai pu louper dans l’utilisation de cette méthode ?
Comme d’habitude, qui vient à mon secours dans ces moments là ? Reflector!
Et là c’est l’hallu… Je vous laisse en juger par vous même :
Eh oui vous voyez comme moi, le paramètre bool inherit n’est pas utilisé… en fait ici il ne sert à rien…
Certains diront que c’est un bug. Moi je préfère dire que ce n’en ai pas un, que c’est juste une méthode qui n’est pas tout à fait terminée… chez moi j’appelle ça un bug normal, mais peu importe.
Heureusement il y a toujours une solution !! Il suffit d’utiliser la méthode statique System.Attribute.GetCustomAttributes(MemberInfo m, bool inherit).
Comme vous pouvez le voir ci-dessous celle-ci fait bien ce qu’on lui demande de faire :
Ce genre d’oubli me rassure tout de même, car je me dis que finalement ce sont des hommes comme vous et moi qui codent le framework.
Disclaimer The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.