2009-08-20 10 views
6

Dwa pytania dotyczące atrybutów:.NET: Kiedy są tworzone atrybuty i czy mogę uzyskać odniesienie do typu, który dekorują?

  1. Kiedy tworzone są klasy atrybutów? Kiedy po raz pierwszy dostęp do typu lub na początku wykonywania?
  2. Z klasy atrybutu, czy mogę dowiedzieć się, dla którego typu został utworzony atrybut?

Chodzi o to, że chcę utworzyć listę wszystkich klas w moim zespole, do których zastosowałem mój atrybut. Mógłbym oczywiście przejrzeć je wszystkie za pomocą refleksji i sprawdzenia - ale byłoby ładniej, gdyby atrybut mógł po prostu dołączyć do globalnej listy statycznej po utworzeniu instancji.

Odpowiedz

11

Atrybuty są nie automatycznie tworzone po uruchomieniu aplikacji. Jedynym sposobem sprawdzenia, który typ (lub jakikolwiek element IL, jeśli o to chodzi) ma zastosowany atrybut, jest iterowanie wszystkiego i sprawdzanie jeden po drugim. W konsekwencji atrybuty nie mogą automatycznie przejąć kontroli nad programem.

Są to w zasadzie metadane załączone do niektórych rzeczy. Ich konstruktor jest wywoływany, gdy reflection tworzy instancję klasy atrybutów, która reprezentuje atrybut w czasie wykonywania. Dzieje się tak tylko wtedy, gdy poprosisz o to, aby to zrobić (metodą Type.GetCustomAttributes.)

Powiązane problemy