Доступ к атрибутам, примененным к методу в производном классе из базового класса
-
07-07-2019 - |
Вопрос
Итак, у меня есть случай, когда я хотел бы иметь возможность применять атрибуты к (виртуальному) методу в производном классе, но я хотел бы иметь возможность предоставить реализацию по умолчанию, которая использует эти атрибуты в мой базовый класс.
Мой первоначальный план для этого состоял в том, чтобы переопределить метод в производном классе и просто вызвать базовую реализацию, применяя требуемые атрибуты на этом этапе, следующим образом:
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();
}
}
Это печатает только "Базовое значение для тестирования", а не другие значения, которые мне действительно нужны.
Есть ли у кого-нибудь предложения о том, как я могу изменить это, чтобы получить желаемое поведение?
Решение
Вы явно отражаете метод GetAttributes
класса Base
класса.
Измените реализацию, чтобы вместо нее использовать GetType ()
. Как в:
public virtual void GetAttributes() {
MethodInfo method = GetType().GetMethod("GetAttributes");
// ...