Подтвердить что ты не робот

Когда создаются объекты атрибута?

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

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

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