Итак, у меня есть случай, когда я хотел бы иметь возможность применять атрибуты к (виртуальному) методу в производном классе, но я хотел бы иметь возможность предоставить реализацию по умолчанию, которая использует эти атрибуты в мой базовый класс.
Мой первоначальный план для этого состоял в том, чтобы переопределить метод в производном классе и просто вызвать базовую реализацию, применяя требуемые атрибуты на этом этапе, следующим образом:
public class Base {
[MyAttribute("A Base Value For Testing")]
public virtual void GetAttributes() {
MethodInfo method = typeof(Base).GetMethod("GetAttributes");
Attribute[] attributes = Attribute.GetCustomAttributes(method, typeof(MyAttribute), true);
foreach (Attibute attr in attributes) {
MyAttribute ma = attr as MyAttribute;
Console.Writeline(ma.Value);
}
}
}
public class Derived : Base {
[MyAttribute("A Value")]
[MyAttribute("Another Value")]
public override void GetAttributes() {
return base.GetAttributes();
}
}
Это печатает только «Базовое значение для тестирования», а не другие значения, которые мне действительно нужны.
Есть ли у кого-нибудь какие-либо предложения относительно того, как я могу изменить это, чтобы получить желаемое поведение?