El código que se examina en el contexto de sólo reflexión no se puede ejecutar, por lo que no siempre es posible examinar atributos personalizados creando instancias de ellos y, a continuación, examinando sus propiedades, utilizando métodos como System.Attribute.GetCustomAttributes, System.Reflection.MemberInfo.GetCustomAttributes, etc. Si se carga el código del propio tipo de atributo en el contexto de sólo reflexión, éste no podrá ejecutarse.
La clase CustomAttributeData permite examinar atributos personalizados en el contexto de sólo reflexión al proporcionar una abstracción para los atributos. Los miembros de esta clase pueden utilizarse con el fin de obtener valores para los argumentos de posición y argumentos con nombre del atributo. En el caso de enumeraciones, el valor se proporciona utilizando el tipo subyacente de la enumeración. En la estructura CustomAttributeTypedArgument, el nombre de la enumeración se proporciona junto con el valor.
Se puede utilizar CustomAttributeData tanto en el contexto de ejecución como en el contexto de sólo reflexión. Por ejemplo, puede se desee evitar cargar el ensamblado que contiene el código para un atributo personalizado. Utilizar la clase CustomAttributeData no es lo mismo que utilizar métodos como System.Attribute.GetCustomAttributes:
-
Las propiedades y los métodos de CustomAttributeData sólo proporcionan los valores que se especificaron para la instancia del atributo y no la semántica del constructor. Por ejemplo, el argumento de cadena de un atributo puede convertirse internamente en alguna otra representación y devolverse con un formato canónico; o bien una propiedad podría tener efectos secundarios al ejecutar el código de atributo real.
-
Las propiedades y métodos de CustomAttributeData no permiten recuperar los atributos personalizados heredados de las clases base.
Para crear instancias de la clase CustomAttributeData, utilice los métodos de generador GetCustomAttributesstatic (Shared en Visual Basic).