une barre de classe comme ceci:Réflexion sur la propriété pour obtenir des attributs. Comment faire quand ils sont définis ailleurs? Je
class Foo : IFoo {
[Range(0,255)]
public int? FooProp {get; set}
}
class Bar : IFoo
{
private Foo foo = new Foo();
public int? FooProp { get { return foo.FooProp; }
set { foo.FooProp= value; } }
}
Je dois trouver l'attribut [Range (0255)] qui reflète uniquement sur la propriété Bar.FooProp. Je veux dire, le prop est décoré dans l'instance de classe (.. new Foo()) pas dans la classe quand je suis en train d'analyser. Enfait Bar.FooProp n'a pas d'attributs
EDIT
Je déplaçais attributs sur la définition de l'interface, donc ce que je dois faire est l'analyse des interfaces héritées pour les trouver. Je peux le faire parce que la classe Bar doit mettre en œuvre que je suis chanceux IFoo.In ce cas particulier, mais le problème reste quand j'ai aucune interface ... Je prends note pour la prochaine fois
foreach(PropertyInfo property in properties)
{
IList<Type> interfaces = property.ReflectedType.GetInterfaces();
IList<CustomAttributeData> attrList;
foreach(Type anInterface in interfaces)
{
IList<PropertyInfo> props = anInterface.GetProperties();
foreach(PropertyInfo prop in props)
{
if(prop.Name.Equals(property.Name))
{
attrList = CustomAttributeData.GetCustomAttributes(prop);
attributes = new StringBuilder();
foreach(CustomAttributeData attrData in attrList)
{
attributes.AppendFormat(ATTR_FORMAT,
GetCustomAttributeFromType(prop));
}
}
}
}
En fait, la clé reflète "inside" la méthode get/set. Je ne sais pas s'il y a un moyen de comprendre le retour param est un appel à une méthode d'instance .. –
Si vous êtes * dans * le get/set, alors vous connaissez déjà le type ... il suffit d'utiliser le type connu ... ? –
mhh ... Je pensais à déplacer les attributs de la définition de l'interface. Donc je réfléchis directement sur les attribs hérités par l'interface, pas sur les propriétés implémentées. Peut-être raison, Marc? –