Reflexión C#

Reflexión C#
Como su nombre indica, la reflexión es algo que proporciona una imagen de información sobre algo. Dentro de C#, una reflexión es un espacio de nombres bien conocido que se encuentra en la biblioteca "Sistema" para ver metadatos sobre las clases, métodos, parámetros o tipos. Contiene muchas clases y atributos para obtener información diferente sobre los aspectos del código. Entonces, hemos decidido realizar algunos ejemplos muy simples para elaborar sobre el uso del espacio de nombres de reflexión junto con sus atributos. Comencemos con la creación de archivos C#.

Ejemplo # 01:

Comenzando con el primer ejemplo, observaremos la elaboración del uso del "sistema.Clase de reflexión "para encontrar información de metadatos sobre diferentes tipos, métodos o campos. Entonces, hemos comenzado este código con el uso de la biblioteca del sistema, y ​​después de eso, hemos utilizado el "sistema.Clase de reflexión "en el código. Hemos comenzado una prueba de espacio de nombres y una prueba de clase dentro de ella.

Esta prueba de clase contiene una sola función, "main ()", que será nuestra función de controlador para este código. La función Main () se ha iniciado con la palabra clave "tipo", que carga un tipo "T1" de una cadena a través de la función "typeof ()" desde la clase del sistema. El "tipo" surgió de la clase de reflexión. Ahora, el mismo procedimiento se ha utilizado para cargar el tipo de T2 y T3 de un entero y carácter, respectivamente. Como sabemos, a la clase de reflexión presentó muchos de los atributos de metadatos para descubrir la información sobre tipos, métodos y campos.

Entonces, usaremos esos atributos de metadatos aquí para encontrar información sobre los tipos T1, T2 y T3. Por lo tanto, hemos usado tres consola.Declaraciones de funciones WriteLine () Para mostrar el nombre, Name Full, espacio de nombres y Basetype del tipo T1, T2 y T3 por separado. Para esto, hemos estado utilizando los atributos "Nombre", "Name Full", "espacio de nombres" y "BaseType" de una clase de reflexión aquí en el código.

Hemos estado compilando este recién hecho "Reflexión.Archivo CS "con el compilador C#" MCS "ya incorporado en nuestro sistema Linux. Se ha generado el archivo "exe" para este código, y lo hemos usado para ejecutar el código compilado con el comando "mono" de tiempo de ejecución. La salida que se muestra en nuestra pantalla nos muestra el nombre, el nombre completo, el espacio de nombres y la información de Basetype para la cadena de tipo cargada, el entero y el carácter.

Ejemplo # 02:

En nuestro primer ejemplo, obtuvimos información sobre el tipo de metadatos de C# utilizando los atributos de la clase de reflexión. Usaremos la clase de reflexión para obtener información de metadatos sobre el "ensamblaje cargado."Entonces, hemos estado comenzando nuestro ejemplo con el uso de la biblioteca" Sistema "en la primera línea y utilizando el" Sistema.Clase de reflexión "en la segunda línea.

Este código contiene una prueba de espacio de nombres con la misma prueba de clase de nombre. En esta prueba de clase, hemos estado utilizando la función del controlador Main () para comenzar a ejecutar nuestro sistema. Dentro de la función Main (), la ejecución comienza al cargar un ensamblaje "T."Esta variable de ensamblaje cargada" T "obtendrá la información de metadatos con respecto al ensamblaje" INT "de C# a través de la función" Typeof "utilizando" INT "dentro de él, seguido de la palabra clave DOT y" Ensamblaje ". La siguiente línea exacta tiene la consola.Función WriteLine () para mostrar la información de metadatos sobre el ensamblaje "T."La clase y el espacio de nombres se completan aquí, y el código se guarda para su uso.

Hemos compilado este código C# recién hecho con el compilador "MCS" y luego lo ejecutamos con el ejecutor de tiempo de ejecución "mono" para C# en Ubuntu 20.04. Mostró el nombre de una biblioteca para el ensamblaje "T" como "Mscorlib", su versión, cultura y token de clave pública en nuestra pantalla debajo.

Ejemplo # 03:

Dentro de nuestro último ejemplo, echaremos un vistazo a la información de metadatos para todas las clases, métodos, atributos o parámetros utilizados en el código a través de la clase de reflexión. Entonces, hemos estado comenzando este código con el mismo patrón de código que hemos usado en los dos ejemplos anteriores, I.mi., el uso de la biblioteca del sistema y el "sistema.Clase de reflexión ". Se ha creado un espacio de nombres "nuevo" que tiene dos clases en él, yo.mi., Información y prueba.

Discutamos primero la clase de "información". Dentro de esta clase, hemos estado utilizando la definición de las propiedades o variables que tenemos que usar en este código, i.mi., Age of int Type y Nombre del tipo de cadena. Los atributos "Get" y "Set" se utilizan para obtener el valor para ambos valores y asignarlos a la edad y el nombre de las variables, respectivamente. Aquí hay dos funciones de constructor en la información de la clase. El primer constructor no tiene parámetros, mientras que el otro es un constructor parametrizado que obtiene valores en nuevas variables "A" y "N."El constructor simple inicializa los valores de edad y nombre variables a 25 y" vacía ", respectivamente.

Por otro lado, el otro constructor ha estado asignando valores de variables aleatorios a las variables de edad y nombre, i.mi., vacío. La función "show ()" definida por el usuario se ha utilizado aquí para mostrar los valores variables de 'edad' y 'nombre' en la consola de Ubuntu 20.04 Uso de la función WriteLine () desde la clase de consola de la biblioteca del sistema. La primera clase se ha completado aquí.

Discutamos la clase de "prueba" donde hemos estado utilizando los atributos de "reflexión" para obtener información de metadatos sobre el código. Entonces, contiene un método main () que es nuestro ejecutor para este código. Hemos cargado un objeto para el ensamblaje de clase "ASB" para obtener el ensamblaje de ejecución actualmente con la función 'getExecutingAsmbly'. Este objeto "ASB" se ha utilizado para llamar a la función "getTypes ()" para almacenar la información de tipo de ensamblaje dentro de la matriz de tipos "T."

Ahora, es hora de iterar cada tipo de la asamblea y obtener información sobre sus metadatos. Entonces, dentro del primer bucle "foreach", hemos estado iterando el tipo utilizado en el código a través de la matriz de tipos "t", i.mi., clases. El nombre de las clases totales utilizadas se mostrará mediante el atributo "Nombre" de la clase de reflexión. Se ha inicializado una matriz "Met" de MethodInfo para obtener métodos totales en la clase específica utilizando el iterador "I.Se utiliza un bucle "interno" interno "para mostrar el nombre de cada método dentro de la clase específica a través del atributo de nombre.

La matriz de tipo ParameterInfo "par" se define para obtener la información del parámetro para todos los métodos de la clase específica utilizando la función "getParameters". El último bucle interno se usa para iterar todos los parámetros "P" que se encuentran en la matriz "PAR" para mostrar el nombre del parámetro y el tipo de parámetro en el shell utilizando el atributo Nombre y ParameterType de la clase de reflexión. Nuestro código ahora está completo y listo para la compilación.

La información de metadatos sobre las clases de "información" y "prueba" se muestra por separado. Las clases tienen métodos de tipo de parámetro int; Métodos de tipo de cadena; y métodos de tipo de objeto

Conclusión:

Así es como se puede utilizar una clase de reflexión para el espacio de nombres para obtener información de metadatos sobre métodos, tipos, parámetros, ensamblajes y clases. Dentro de nuestros dos primeros ejemplos, hemos discutido el uso del nombre, el nombre completo, el espacio de nombres, el atributo Basetype de la clase de reflexión para obtener información sobre los tipos y el ensamblaje cargados, I, I.mi., int, char, cadena. En el último ejemplo, hemos utilizado el atributo GetTypes, GetMethods (), GetParameters y el Atributo de tipo de nombre y parámetro de la clase de reflexión para obtener metadatos sobre todo el código.