Soy MUY nuevo en ASP.NET. Vengo de un fondo VB6/ASP (clásico)/SQL Server 2000. Estoy leyendo mucho sobre Visual Studio 2008 (lo he instalado y estoy hurgando). He leído sobre "reflexión" y me gustaría que alguien le explique, lo mejor que pueda a un desarrollador anterior de las tecnologías que he escrito anteriormente, qué es exactamente Reflection y por qué lo usaría ... Tengo problemas para obtener mi cabeza alrededor de eso. ¡Gracias!¿Qué es la reflexión?
Respuesta
Reflexión programación le permite cargar un ensamblado, obtener una lista de todos los tipos en una asamblea, obtener una lista de todas las propiedades y métodos de este tipo, etc.
A modo de ejemplo:
myobject.GetType().GetProperty("MyProperty").SetValue(myobject, "wicked!", null)
OK. Eso está claro. –
Es muy probable que no necesite realizar thi s tipo de operación si estás "comenzando con asp.net" :) –
Probablemente no necesites usarlo inmediatamente, sí. ¡Pero a veces es útil saber de lo que están hablando otras personas! – yfeldblum
La reflexión es cómo puede explorar las partes internas de los diferentes tipos, sin tener normalmente acceso (es decir, miembros privados, protegidos, etc.).
También se utiliza para cargar dinámicamente DLL y obtener acceso a tipos y métodos definidos en ellos sin compilarlos estáticamente en su proyecto.
En pocas palabras: Reflexión es su conjunto de herramientas para mirar debajo del capó de un código.
En cuanto a por qué lo usaría, generalmente solo se usa en situaciones complejas o análisis de código. El otro uso común es para cargar complementos precompilados en su proyecto.
Gracias. Esto lo aclara ... mucho. Todavía un poco confundido Pero estoy mucho más claro en eso ahora. ¿Algo como "metacódigo"? (Creé esa palabra pero en el sentido genérico de "meta ..."? –
Por la definición normal de "meta ...", querría decir código que describe código. Eso es lo que expone el espacio de nombres Reflection, esa descripción. El código que usa Reflection usa esa información de alguna manera, ya sea información sobre su propio ensamblaje, –
o algún otro ensamblaje que haya cargado, dinámicamente o no. –
Permite que las partes internas de un objeto se reflejen en el mundo exterior (código que está utilizando dichos objetos).
Un uso práctico en lenguajes tipados estáticos como C# (y Java) es permitir la invocación de métodos/miembros en tiempo de ejecución a través de una cadena (por ejemplo, el nombre del método; quizás no conozca el nombre del método usará en tiempo de compilación).
En el contexto de los lenguajes dinámicos, no he escuchado el término tanto (como generalmente no te preocupas por lo anterior), otros quizás para iterar a través de una lista de métodos/miembros, etc ...
Así que no es solo ASP.NET ..... ¿En qué otro lugar esto es compatible Y tengo que preocuparme por esto ya que empiezo con "dot net"? –
No creo que deba preocuparse si solo está comenzando Sin embargo, es parte del framework .NET, por lo que es relevante para todo el desarrollo de .NET (no solo ASP.NET) –
La reflexión es un medio de .Net para manipular o extraer información de un ensamblaje, clase o método al tiempo de ejecución. Por ejemplo, puede crear una clase en tiempo de ejecución, incluidos sus métodos. Como se establece por monóxido, la reflexión se usa para cargar dinámicamente el ensamblaje como complementos, o en casos avanzados, se usa para crear una compilación .Net de redirección .Net, como IronPython.
Actualizado: Puede consultar el tema en metaprogramming y sus temas relacionados para obtener más información.
Cuando construye cualquier ensamblado en .NET (ASP.NET, Windows Forms, línea de comando, biblioteca de clases, etc.), también se crean varias "tablas de definición" de metadatos dentro del ensamblaje almacenando información sobre métodos, campos y tipos correspondientes a los tipos, campos y métodos que escribió en su código.
Las clases en el espacio de nombres System.Reflection en .NET le permiten enumerar e interactuar sobre estas tablas, proporcionando un "modelo de objeto" para que pueda consultar y acceder a los elementos en estas tablas.
Un uso común de Reflection es proporcionar extensibilidad (complementos) a su aplicación.Por ejemplo, Reflection le permite cargar un ensamblaje dinámicamente desde una ruta de archivo, consultar sus tipos para un tipo útil específico (como una interfaz a la que su aplicación puede llamar) y luego invocar un método en este ensamblaje externo.
Los atributos personalizados también van de la mano con la reflexión. Por ejemplo, el marco de prueba de la unidad NUnit le permite indicar una clase de prueba y métodos de prueba agregando atributos [Test] {TestFixture] a su propio código.
Sin embargo, el corredor de prueba NUnit debe usar Reflection para cargar su ensamblaje, buscar todas las instancias de métodos que tengan el atributo de prueba y luego llamar a su prueba.
Esto lo está simplificando mucho, sin embargo, le ofrece un buen ejemplo práctico de dónde la Reflexión es esencial.
La reflexión ciertamente es poderosa, sin embargo, tenga en cuenta que le permite ignorar por completo el concepto fundamental de los modificadores de acceso (encapsulación) en la programación orientada a objetos.
Por ejemplo, puede usarlo fácilmente para recuperar una lista de métodos privados en una clase y realmente llamarlos. Por esta razón, debe pensar cuidadosamente sobre cómo y dónde lo usa para evitar pasar por alto la encapsulación y un código de acoplamiento muy ajustado (incorrecto).
- 1. En 3 minutos, ¿qué es la reflexión?
- 2. ¿Por qué la reflexión es lenta?
- 3. ¿Qué problemas resuelve la reflexión?
- 4. ¿La reflexión es realmente lenta?
- 5. (¿Por qué) la reflexión es tan cara en .Net?
- 6. ¿Qué es lo que es peor: reflexión o boxeo?
- 7. ¿Qué riesgo presenta la Reflexión? (Confianza media)
- 8. ¿Es la ingeniería inversa de reflexión?
- 9. ¿Cuál es la diferencia entre la reflexión basada en espejo y la reflexión tradicional?
- 10. ¿La metaprogramación es un subconjunto de la reflexión?
- 11. Java: ¿cuál es la inflación por reflexión de JITC?
- 12. Cómo usar la reflexión para crear una "máquina de reflexión"
- 13. 'colado' con la reflexión
- 14. ¿Qué funciones de Scala se implementan internamente utilizando la reflexión?
- 15. Mejorando la reflexión del rendimiento, qué alternativas debería considerar
- 16. ¿Por qué la reflexión no funciona bien en .NET?
- 17. profundo de reflexión es igual a comparar
- 18. ¿Es posible establecer propiedad privada a través de la reflexión?
- 19. ¿Cuál es el "costo" de la reflexión .NET?
- 20. ¿Es posible desactivar la reflexión desde un ensamblado .NET?
- 21. inyección TypeLiteral con la reflexión
- 22. consigo campos con la reflexión
- 23. ImageMagick Reflexión
- 24. ¿Cómo trato con matrices usando la reflexión
- 25. ¿Cómo implementaría la reflexión básica en C++?
- 26. Adecuación de la reflexión de Java
- 27. ¿Cuándo usas la reflexión? Patrones/antipatrones
- 28. Justificación para la reflexión en C#
- 29. Reflexión en php namespace
- 30. ¿La reflexión rompe el principio de encapsulación?
Es una forma de metaprogramación. – OnesimusUnbound
Estoy empezando a ver eso. Es genial. –
posible duplicado de [¿Qué es el reflejo y por qué es útil?] (Http://stackoverflow.com/questions/37628/what-is-reflection-and-why-is-it-useful) – nawfal