Je dois être en mesure de récupérer les attributs personnalisés d'une classe à partir d'une méthode de sa classe de base. En ce moment je fais via une méthode statique protégée dans la classe de base avec la mise en œuvre suivante (la classe peut avoir plusieurs instances du même attribut appliqué):Comment appeler GetCustomAttributes à partir d'une classe de base?
//Defined in a 'Base' class
protected static CustomAttribute GetCustomAttribute(int n)
{
return new StackFrame(1, false) //get the previous frame in the stack
//and thus the previous method.
.GetMethod()
.DeclaringType
.GetCustomAttributes(typeof(CustomAttribute), false)
.Select(o => (CustomAttribute)o).ToList()[n];
}
Je l'appelle d'une classe dérivée ainsi:
[CustomAttribute]
[CustomAttribute]
[CustomAttribute]
class Derived: Base
{
static void Main(string[] args)
{
var attribute = GetCustomAttribute(2);
}
}
Idéalement, je serais capable d'appeler cela du constructeur et mettre en cache les résultats.
Merci.
PS
Je me rends compte que GetCustomAttributes n'est pas garanti pour les retourner par rapport à l'ordre lexical.
Merci. C'est une bonne chose mais j'en ai besoin pour travailler pour les célibataires. En regardant le cadre de la pile se sent hackish mais il garde l'API propre donc je m'en tiendrai à cela pour l'instant. J'ai accepté votre réponse, car cela peut aider les autres. –