Existe una superposición distintiva entre lo que puede hacer con ambos. ¿El reflejo de ComponentModel es solo una capa más amigable sobre System.Reflection?Diferencia entre la reflexión de ComponentModel (por ejemplo, PropertyDescriptor) y la reflexión estándar (por ejemplo, PropertyInfo)?
Respuesta
No, hay más. ComponentModel le permite hacer algunas cosas de tipo DLR, como propiedades de tiempo de ejecución. Así es como un DataView expone columnas a una grilla, no son propiedades de reflejo, son propiedades de tiempo de ejecución. Las palabras clave aquí son ICustomTypeDescriptor
y TypeDescriptionProvider
.
Este modelo también permite la abstracción y la indirección. Por ejemplo, si está reflexionando mucho sobre las propiedades, considere HyperDescriptor; esta es una utilidad que escribí y que usa una implementación personalizada de PropertyDescriptor
para cambiar el modelo de reflexión por un modelo precompilado, para aumentar el rendimiento.
En términos de uso, existen algunas otras diferencias; ComponentModel solo admite una sola instancia de cualquier atributo en un miembro (a diferencia de la reflexión, donde se permiten múltiples atributos similares). Y está centrado en los datos, por lo que existen propiedades, al igual que los eventos (principalmente destinados a la notificación de cambios), pero no hay campos ni métodos.
También tiene un buen soporte para i18n, ya que el DisplayName etc. se puede personalizar sobre la marcha.
Sin embargo, ComponentModel no es (directamente) compatible con elementos como LINQ (MemberExpression en particular), ya que esto se quiere vincular a los datos de reflexión.
Finalmente, ComponentModel es muy utilizado en el IDE por cosas como PropertyGrid (así es como funcionan las propiedades adicionales para tool-tips), pero casi todos los enlaces de datos de UI se realizan a través de ComponentModel (ya que esto permite admite DataTable, clases y cualquier otra cosa que se te ocurra).
- 1. ¿Cuál es la diferencia entre la reflexión basada en espejo y la reflexión tradicional?
- 2. ¿Por qué la reflexión es lenta?
- 3. 'colado' con la reflexión
- 4. ¿Cómo funciona la "reflexión estática" en Java? (por ejemplo, en mockito o easymock)
- 5. Establecer propiedad Nullable <> por reflexión
- 6. Iteración de matrices por reflexión
- 7. ¿Por qué no una función de reflexión memberinfo() para C#
- 8. Establecer una propiedad por reflexión con un valor de cadena
- 9. Reflexión y tipos genéricos
- 10. La mejor forma de invocar getter por reflexión
- 11. Iconos de menú de Android estándar, por ejemplo, actualización
- 12. ¿La reflexión es realmente lenta?
- 13. (¿Por qué) la reflexión es tan cara en .Net?
- 14. Scala por ejemplo?
- 15. ¿Qué es la reflexión?
- 16. ¿Qué problemas resuelve la reflexión?
- 17. Java: ¿cuál es la inflación por reflexión de JITC?
- 18. Prólogo: Aprendiendo por ejemplo
- 19. Cómo usar la reflexión para crear una "máquina de reflexión"
- 20. ¿Diferencia entre los tipos existenciales de Scala y el comodín de Java por ejemplo?
- 21. Acceso última variable estática por medio de la reflexión
- 22. Crear objeto anónimo por reflexión en C#
- 23. Ejemplo de llamada por nombre
- 24. Ofuscación Asamblea y Reflexión
- 25. Descripción de Comet por ejemplo
- 26. ¿Por qué la reflexión no funciona bien en .NET?
- 27. Obteniendo todas las clases internas por reflexión
- 28. La aplicación web impulsada por pitón de ejemplo de ejemplo incrementa el recuento de solicitudes por 2, ¿por qué?
- 29. ¿La reflexión rompe el principio de encapsulación?
- 30. Gramática: ¿diferencia entre arriba hacia abajo y hacia abajo? (Ejemplo)
Sé que esto es más antiguo que las colinas, pero ¿podría explicar algunas de las cosas que puede y no puede hacer en LINQ si utiliza System.ComponentModel para la reflexión? – wootscootinboogie
@woot que es una respuesta corta: LINQ no se preocupa por ComponentModel –