11 votes

Obtenez les attributs des méthodes de l'interface et des méthodes de la classe.

Quelle est la meilleure approche pour obtenir les valeurs d'attribut des méthodes d'une classe et des méthodes de l'interface lorsque les méthodes sont surchargées ?

Par exemple, je voudrais savoir que dans l'exemple suivant, la méthode Get avec un paramètre possède deux attributs dont les valeurs sont 5 et "any", tandis que l'autre méthode possède des attributs dont les valeurs sont 7 et "private".

public class ScopeAttribute : System.Attribute
{
    public string Allowed { get; set; }    
}

public class SizeAttribute : System.Attribute
{
    public int Max { get; set; }
}

public interface Interface1
{
    [SizeAttribute( Max = 5 )]
    string Get( string name );

    [SizeAttribute( Max = 7 )]
    string Get( string name, string area );

}

public class Class1 : Interface1
{
    [ScopeAttribute( Allowed = "any" )]
    public string Get( string name )
    {
        return string.Empty;
    }

    [ScopeAttribute( Allowed = "private" )]
    public string Get( string name, string area )
    {
        return string.Empty;
    }
}

7voto

Darek Malinowski Points 201

Le seul moyen que j'ai trouvé est de vérifier quelles interfaces la classe implémente et de vérifier les attributs des propriétés ( s'il en existe ) sur ces interfaces :

static bool HasAttribute (PropertyInfo property, string attribute) {
  if (property == null)
    return false;

  if (GetCustomAttributes ().Any (a => a.GetType ().Name == attribute))
    return true;

  var interfaces = property.DeclaringType.GetInterfaces ();

  for (int i = 0; i < interfaces.Length; i++)
    if (HasAttribute (interfaces[i].GetProperty (property.Name), attribute))
      return true;

  return false;
}

Vous pouvez probablement l'adopter à des méthodes tout aussi faciles.


<em><strong>Note </strong>: l'approche globale est testée mais le code lui-même est ad-hoc et peut ne pas compiler.</em>

1voto

Peyman Points 1070

Vous pouvez utiliser API TypeDescriptor

System.ComponentModel.TypeDescriptor.GetAttributes(object)

0voto

Navid Rahmani Points 3816

Vous devez utiliser la réflexion pour obtenir les valeurs des attributs personnalisés.

utiliser MemberInfo.GetCustomAttributes Méthode pour retourner les attributs personnalisés attachés à votre membre

voici un tutoriel http://msdn.microsoft.com/en-us/library/aa288454(v=VS.71).aspx

EDIT : pour obtenir des attributs de l'interface, regardez dans aquí

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X