Доступ к атрибутам, примененным к методу в производном классе из базового класса

StackOverflow https://stackoverflow.com/questions/278867

Вопрос

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

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

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");
    // ...
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top