2008-10-05 11 views
6

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?

+1

Es una forma de metaprogramación. – OnesimusUnbound

+0

Estoy empezando a ver eso. Es genial. –

+0

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

Respuesta

3

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) 
+0

OK. Eso está claro. –

+0

Es muy probable que no necesite realizar thi s tipo de operación si estás "comenzando con asp.net" :) –

+0

Probablemente no necesites usarlo inmediatamente, sí. ¡Pero a veces es útil saber de lo que están hablando otras personas! – yfeldblum

8

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.

+0

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 ..."? –

+0

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, –

+0

o algún otro ensamblaje que haya cargado, dinámicamente o no. –

2

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 ...

+0

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"? –

+0

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) –

1

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.

0

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).

Cuestiones relacionadas