Мне нужно иметь возможность извлекать пользовательские атрибуты класса из метода в его базовом классе. Прямо сейчас я делаю это через защищенный статический метод в базовом классе со следующей реализацией (класс может иметь несколько примененных экземпляров одного и того же атрибута):
//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];
}
Я называю это из производного класса так:
[CustomAttribute]
[CustomAttribute]
[CustomAttribute]
class Derived: Base
{
static void Main(string[] args)
{
var attribute = GetCustomAttribute(2);
}
}
В идеале я бы мог вызывать это из конструктора и кэшировать результаты.
Спасибо.
PS
Я понимаю, что GetCustomAttributes не гарантирует их возврат в отношении лексического порядка.