2009-08-20 13 views
6

Due domande su attributi:.NET: quando gli attributi sono istanziati e posso ottenere un riferimento al tipo che stanno decorando?

  1. Quando sono classi di attributi un'istanza? Quando si accede per la prima volta al tipo o all'inizio dell'esecuzione?
  2. Dall'interno della classe di attributi, è possibile sapere per quale tipo l'attributo è stato istanziato?

L'idea è che voglio creare un elenco di tutte le classi nel mio assieme a cui è stato applicato il mio attributo. Ovviamente potrei scorrere tutte le fasi con la riflessione e il controllo - ma sarebbe meglio se l'attributo potesse semplicemente essere aggiunto a una lista statica globale dopo l'istanziazione.

risposta

11

Gli attributi sono non automaticamente istanziati all'avvio dell'applicazione. L'unico modo per vedere quali tipi (o qualsiasi elemento IL, per quella materia) ha l'attributo applicato è quello di iterare tutto e controllare uno per uno. Di conseguenza, gli attributi non possono assumere automaticamente il controllo di un programma.

Sono fondamentalmente metadati collegati ad alcune cose. Il loro costruttore viene chiamato quando la riflessione istanzia la classe di attributi che rappresenta l'attributo in fase di esecuzione. Ciò si verifica solo quando si richiede la riflessione per farlo (tramite il metodo Type.GetCustomAttributes).

Problemi correlati