c# - snell - reflexion y refraccion de la luz para niños




¿Por qué se recomienda el uso de la reflexión en.NET? (6)

¿Definitivamente es una buena práctica usarlo?

¿Cuáles son algunas situaciones posibles en un proyecto que necesitan reflexión?


Como se mencionó anteriormente, el rendimiento tendrá éxito.

Otra gran ventaja es que puede cargar ensamblajes dinámicamente, realizar manipulaciones de propiedades aunque no tenga el alcance para ver qué cambiar, etc.

Las razones para usar esto son muchas. Aquí hay una introducción si es necesario.


El valor principal de Reflection es que se puede usar para inspeccionar conjuntos, tipos y miembros. Es una herramienta muy poderosa para determinar el contenido de un ensamblaje u objeto desconocido y se puede usar en una gran variedad de casos.

Los oponentes de Reflection citarán que es lento, lo cual es cierto cuando se compara con la ejecución de código estático; sin embargo, Reflection se usa en todo el framework .NET y, siempre que no se abuse, puede ser una herramienta muy poderosa en el toolkit.

Algunas aplicaciones útiles:

  • Determinación de dependencias de un ensamblaje

  • Los tipos de ubicación que se ajustan a una interfaz, derivan de una clase base / abstracta y buscan miembros por atributos

  • Prueba (maloliente): si dependes de una clase que no puede ser comprobada (es decir, no te permite construir fácilmente una falsificación), puedes usar Reflection para inyectar valores falsos dentro de la clase; no es bonita ni recomendable, pero puede ser una herramienta útil en un enlace.

  • Depuración: eliminación de una lista de los ensamblados cargados, sus referencias, métodos actuales, etc.


La muy útil clase XmlSerialization se basa en la reflexión. No necesita lidiar con la reflexión usted mismo para usar la serialización, las clases de serialización invocan la reflexión ellos mismos. Pero ayuda a etiquetar su código con Atributos que guían cómo se serializan los objetos. Las clases de serialización usan la reflexión en tiempo de ejecución para leer esos atributos. Al final, el proceso parece casi mágico, requiriendo muy pocas líneas de codificación explícita en una aplicación; es la reflexión lo que hace posible esa conveniencia.

XmlSerialization en sí mismo es asombroso no solo porque es una forma muy conveniente de crear archivos de datos desde una aplicación, sino que también es un medio muy fácil de generar registros legibles por humanos del modelo de datos interno de un programa para fines de depuración.


La reflexión es solo una forma de investigar objetos durante el tiempo de ejecución. No deberías usarlo si no necesitas hacer eso.


Puede usar el reflejo para implementar un sistema de complementos, por ejemplo. Simplemente busca todas las DLL en una carpeta y, a través de una comprobación de reflexión, implementa una cierta interfaz de complemento. Este es el propósito principal para el que utilicé la reflexión, pero también lo utilicé para implementar una serialización genérica de objetos domésticos, donde el rendimiento no era la mayor preocupación.


Viniendo de C ++ y habiendo necesitado algunas jerarquías simples de clase, ¡puedo decir que la palabra clave es invaluable!

class MenuItem : Item { }

foreach(Item items in parent.ChildItems) {
    if (item is MenuItem) { /* handle differently */ }
}

PD: ¿La reflexión no es un poco cara, por cierto?





reflection