Доступ к атрибутам, примененным к методу в производном классе из базового класса - PullRequest
4 голосов
/ 10 ноября 2008

Итак, у меня есть случай, когда я хотел бы иметь возможность применять атрибуты к (виртуальному) методу в производном классе, но я хотел бы иметь возможность предоставить реализацию по умолчанию, которая использует эти атрибуты в мой базовый класс.

Мой первоначальный план для этого состоял в том, чтобы переопределить метод в производном классе и просто вызвать базовую реализацию, применяя требуемые атрибуты на этом этапе, следующим образом:

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();
    }
}

Это печатает только «Базовое значение для тестирования», а не другие значения, которые мне действительно нужны.

Есть ли у кого-нибудь какие-либо предложения относительно того, как я могу изменить это, чтобы получить желаемое поведение?

1 Ответ

7 голосов
/ 10 ноября 2008

Вы явно отражаете метод GetAttributes класса Base.

Вместо этого измените реализацию на GetType(). Как в:

public virtual void GetAttributes() {
    MethodInfo method = GetType().GetMethod("GetAttributes");
    // ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...