Когда создаются объекты атрибутов? - PullRequest
12 голосов
/ 07 февраля 2012

Поскольку атрибуты на самом деле являются просто метаданными, прикрепленными к сборкам, означает ли это, что объекты атрибутов создаются только по запросу (например, когда вы вызываете GetCustomAttributes)?

Или они создаются при создании объекта?

Или комбинация первых двух, созданных при создании объекта из-за сканирования атрибутов с помощью CLR?

Ответы [ 3 ]

8 голосов
/ 07 февраля 2012

Из CLR через C #, третье издание:

Если вы хотите создать объект атрибута, вы должны вызвать либо GetCustomAttributes, либо GetCustomAttribute.Каждый раз, когда вызывается один из этих методов, он создает новые экземпляры указанного типа атрибута и устанавливает каждое из полей и свойств экземпляра на основе значений, указанных в исходном коде.Эти методы возвращают ссылки на полностью построенные экземпляры примененных классов атрибутов.

Так что да, они создаются только по запросу.

4 голосов
/ 07 февраля 2012

Они создаются по запросу.

Например, если вы добавите некоторые атрибуты .NET 3.0 в сборку .NET 2.0 (например, WCF DataContractAttribute), вы все равно сможете использовать.Сборка NET 2.0 на машине, на которой не установлен .NET 3.0, при условии, что у вас нет кода, который пытается получить доступ к атрибутам.

2 голосов
/ 07 февраля 2012

Не совсем так, атрибуты также влияют на генерацию кода.Некоторые атрибуты интерпретируются компилятором, например, [DllImport].Некоторые из них обнаружены джиттером, например, [MethodImpl].Это бесконечно распространяется на другие инструменты и классы в рамках, которые были написаны для использования преимуществ атрибутов.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...