Simplemente curioso, vea MemberInfo.GetCustomAttributes
. ¿Da a entender que puede contener un objeto que no sea de atributo?¿Por qué GetCustomAttributes devuelve object [] en lugar de Attribute []?
Respuesta
Esto se debe a que la especificación CLI no exige que los atributos se deriven de Attribute.
La especificación, en II Part 21 (página 225), establece:
Mientras cualquier tipo definido por el usuario puede ser utilizado como un atributo, el cumplimiento CLS requiere que los atributos serán instancias de tipos cuya clase base es System.Attribute. La CLI predefine algunos tipos de atributos y los usa para controlar comportamiento en tiempo de ejecución. Algunos idiomas predefinen los tipos de atributos para representar funciones de lenguaje no directamente representadas en el CTS. Los usuarios u otras herramientas pueden definir y usar tipos de atributos adicionales.
Básicamente, el CLR en sí mismo no puede garantizar que el resultado será Atributo; esto solo es cierto en los lenguajes que cumplen con CLS. Los lenguajes no compatibles con CLS pueden tener atributos de cualquier tipo, lo que significa que ICustomAttributeProvider.GetCustomAttributes (que es la interfaz implementada en cuestión) necesita proporcionar un mecanismo para obtener atributos que no sean derivados del atributo.
por MSDN: http://msdn.microsoft.com/en-us/library/kff8s254.aspx
This method ignores the inherit parameter for properties and events.
To search the inheritance chain for attributes on properties and events,
use the appropriate overloads of the Attribute.GetCustomAttributes method.
Mi entendimiento es lo que permite que incluso puede costumbre un atributo sin heredar de System.Attribute pero escribir totalmente su propia "Atributo", con el que la flexibilidad, su "Atributo" puede solo heredar Objeto a veces
Además de lo que Reed dijo anteriormente, la API MemberInfo.GetCustomAttributes
le permite especificar un tipo de filtro que influye en el tipo de la matriz que se devuelve. Es decir, cuando especifica typeof (MyAttribute)
, el resultado será realmente MyAttribute[]
(emitido a object[]
).
Ahora, cuando especifica una interfaz tipo IMyAttribute
, la matriz es del tipo IMyAttribute[]
. Y aunque es posible emitir IMyAttribute[]
a object[]
, no es posible convertirlo a Attribute[]
. Entonces, en esencia, si el resultado fuese Attribute[]
, el filtrado basado en interfaces no funcionaría.
(Por cierto, los nuevos Attribute.GetCustomAttributes
API - que fija la resolución de la herencia de propiedades y eventos - tienen Attribute[]
como su tipo de retorno que hace que el filtrado basado en interfaces imposible, se obtiene una ArgumentException cuando se trata de pasar de un tipo de interfaz para. filtrando.)
- 1. ¿Por qué ICustomAttributeProvider.GetCustomAttributes() devuelve object [] en lugar de Attribute []?
- 2. ¿Por qué JavaScript devuelve [Object Object] de valueOf() en lugar de [object]?
- 3. ¿Por qué setProperty en Java devuelve Object?
- 4. GetCustomAttributes no valora
- 5. ¿Por qué Arrays.sort toma Object [] en lugar de Comparable []?
- 6. Python: Mock side_effect on object attribute
- 7. ¿Por qué HttpUtility.UrlEncode (HttpUtility.UrlDecode ("% 20")) devuelve + en lugar de% 20?
- 8. Phonegap localStorage devuelve la cadena "[object Object]" en lugar del objeto
- 9. ¿Por qué scipy.io.wavfile.read no devuelve una tupla?
- 10. la función de éxito de ajax está imprimiendo [object Object] en lugar de texto sin formato. ¿Por qué?
- 11. ¿Por qué is_array() devuelve falso?
- 12. ¿Por qué {} + [] devuelve 0 en Javascript?
- 13. En Ruby, ¿por qué nil.id devuelve 4?
- 14. jQuery .find() en la fecha de .ajax() se vuelve "[object Object]" en lugar de div
- 15. ¿Qué significa [object Object]?
- 16. ¿Por qué Map.containsKey() toma un parámetro Object en lugar de un tipo especializado?
- 17. ¿Por qué lanzar nulo a Object?
- 18. Collections.emptyList() devuelve una lista <Object>?
- 19. ¿Por qué Bitmap.getConfig() devuelve nulo?
- 20. ¿Por qué DomDocument getElementsByTagName devuelve medio NodeList?
- 21. ¿Por qué BitmapFactory.decodeByteArray devuelve nulo?
- 22. ¿Por qué el iter de Python() en un mapeo devuelve iterkeys() en lugar de iteritems()?
- 23. ¿Por qué SUM (...) en un conjunto de registros vacío devuelve NULL en lugar de 0?
- 24. jQuery llamada Ajax que devuelve '[object XMLDocument]'
- 25. ¿Qué es Unity InjectionConstructor Attribute?
- 26. Tipo (3,) devuelve un número entero en lugar de una tupla en Python, ¿por qué?
- 27. ¿Por qué Request.Cookies devuelve una cadena en lugar de un objeto HttpCookie en el bucle foreach?
- 28. ¿Por qué la división en Ruby devuelve un número entero en lugar de un valor decimal?
- 29. ¿Por qué usar {} en lugar de nuevo Object() y usar [] en lugar de new Array() y verdadero/falso en lugar de new Boolean()?
- 30. ¿Qué significa [object Object]? (JavaScript)
Gracias, esto tiene sentido. –