Pergunta

Então eu tenho um caso onde eu gostaria de ser capaz de aplicar atributos a um método (virtual) em uma classe derivada, mas eu gostaria de ser capaz de dar uma implementação padrão que usa esses atributos em minha classe base.

Meu plano original para fazer isso era substituir o método na classe derivada e apenas chamar a implementação base, aplicando os atributos desejados, neste ponto, da seguinte forma:

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

Isso só imprime "A Base de Dados de Valor para o teste", e não os outros valores que eu realmente quero.

Alguém tem alguma sugestão de como posso modificar isso para obter o comportamento desejado?

Foi útil?

Solução

Você está refletindo explicitamente método Base da classe GetAttributes.

Alterar a implementação para uso GetType(), em vez disso. Como em:

public virtual void GetAttributes() {
    MethodInfo method = GetType().GetMethod("GetAttributes");
    // ...
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top