Pergunta

Ao empregar atributos personalizados para armazenar meta-dados, é melhor para decorar a interface, ou a classe que implementa a interface, assumindo que qualquer classe que implementa a interface teria os mesmos dados no atributo?

Update: Basicamente eu estou escrevendo um mecanismo de armazenamento de dados personalizado para um projeto, e os objetos representam as várias tabelas que estão sendo armazenados. O atributo personalizado é usado para designar qual tabela no conjunto de dados é usado para armazenar os objetos dessa classe, e também para identificar quais tabelas estão envolvidas em um n:. Relação m

Então, se eu colocar os atributos na interface, esta é uma abordagem mais clara, ou ele atravancar a interface e tornar acessíveis os dados em si mais complicado?

Foi útil?

Solução

Depende do cenário. WCF, por exemplo, decora as interfaces para os contratos de operação.

No entanto, se você estiver indo para estar falando sobre objetos (em vez da própria interface), nota que ele pode ser doloroso para chamar código para se apossar de metadados interface, especialmente se os usos de classe implementação de interface explícita.

Seria mais comum para decorar a classe, mas isso não é exatamente a mesma pergunta ;-p

Se o atributo é realmente específico para o Interface (não as instâncias), então tudo bem - decorar a interface e falar sobre typeof(IFoo) etc. Mas se você espera que o código para ser capaz de definir per-tipo valores para os atributos, ele terá que estar no nível de classe.

O que é o cenário?

Outras dicas

Bem, isso depende sobre se ou não a interface tem nada a ver com os metadados.

interface IRunnable
{
    void Run();
}

class Test : IRunnable
{
    public void Run() { }
}

Neste exemplo, faria sentido colocar os atributos na interface, se eles dizem respeito à intenção da interface. Se os atributos são aplicáveis ??em todas as implementações em seguida, colocar os atributos na interface.

No entanto, se os atributos não têm nada a ver com a "operacionalidade" (com "operabilidade" pertencente a IRunnable não o CLR) da classe, em seguida, colocar os atributos na classe.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top