2009-05-25 25 views
9

duplicados posibles:
When do you use reflection? Patterns/anti-patterns
What exactly is Reflection and when is it a good approach?¿De qué sirve Reflection en .NET?

¿Cuál es la necesidad de una reflexión en .NET? ¿Cuáles son las situaciones en las que es útil?

+0

Viene a la mano cuando nada más funciona. Al igual que javascript en el mundo web. :) –

+2

duplicado: http://stackoverflow.com/questions/429962/when-do-you-use-reflection-patterns-anti-patterns ... ... ... ... También : http://stackoverflow.com/questions/864332/what-exactly-is-reflection-and-when-is-it-a-good-approach – Shog9

Respuesta

10

Digamos que está escribiendo una rutina de serialización básica, que serializará cualquier objeto a XML. ¿Cómo lo haría lo suficientemente genérico, para que pueda funcionar para cualquier objeto? Si tiene una clase donde conoce todas las propiedades, puede escribir fácilmente una función "ToXml()", donde escribe manualmente todas las propiedades en XML. ¿Qué pasa si quieres extender esto a CUALQUIER objeto? En ese caso, debe reflexionar sobre las propiedades en tiempo de ejecución y escribirlas en el XML.

Existen muchas más aplicaciones para ella, esa es la primera que me vino a la mente.

3

creo que el Wikipedia article on reflection es bastante bueno:

En informática, la reflexión es el proceso por el cual un programa informático puede observar y modificar su propia estructura y comportamiento. El paradigma de programación impulsado por la reflexión se llama programación reflectante . Es un tipo particular de metaprogramación.

En muchas arquitecturas de computadora, instrucciones del programa se almacenan como datos - de ahí la distinción entre de instrucciones y datos es simplemente una cuestión de cómo la información es tratada por el ordenador y lenguaje de programación. Normalmente, 'instrucciones' se 'ejecutan' y 'datos' se 'procesa'; sin embargo, en algunos idiomas, los programas también pueden tratar las instrucciones como datos y por lo tanto hacer modificaciones reflexivas . La reflexión es más comúnmente utilizado en lenguajes de programación de la máquina virtual de alto nivel como lenguajes de scripting y Smalltalk, y usa con menos frecuencia en el escrito manifiestamente y/o estático de tipos programación lenguajes como Java y C

Reflection le permite obtener información sobre el tipo de objeto en tiempo de ejecución. Esto puede ser útil en muchas situaciones, incluida (pero limitada a) la serialización y las asignaciones relacionales de objetos.

+0

Pero no se limita a? – jedmao

1

reflexión se utiliza cuando no se conoce en tiempo de compilación el cual el objeto es o qué acción hay que hacer o en qué propiedad ...

Puede utilizar la reflexión para encontrar todos los objetos de tipo X en una dado Assembly, o invocar algún método por su nombre (extraído de un db, o archivo de configuración ...), lo mismo para establecer una propiedad ... cosas así (este es el caso donde lo usamos)

4

Hay muchos usos para la reflexión. Los .NET Framework lo usa para serialization y para data binding, también se puede usar para crear herramientas que examinen su código como Reflector, FxCop y NUnit, así como marcos de base de datos ORM. Tiene una amplia variedad de usos en tiempo de ejecución, desde el registro de cosas específicas sobre un objeto hasta el Dependency Injection Frameworks. También se puede usar para ejecutar métodos dinámicamente o establecer propiedades en tiempo de ejecución como se hace con atributos personalizados. También se puede usar en programación de nivel superior como metaprogramming y código de auto modificación.

3

Se utiliza para metaprogramming, que es el momento de codificar sobre el código en sí en lugar de los habituales problemas de negocios

2

También puede ser muy útil al probar la aplicación, por ejemplo, pruebas unitarias u otros tipos de marcos de prueba. Al usar la reflexión, podría, por ejemplo, crear un archivo xml (o algún otro archivo de datos de entrada en un formato adecuado) y hacer que su programa lo analice y llame a los métodos que están definidos en el archivo. Así es como funciona el Fitnesse.