TOC

This article is currently in the process of being translated into Spanish (~99% done).

Reflection:

Reflection introduction

En Wikipedia se indica que "En las ciencias de la computación, la reflexión es el proceso por el cual un programa de computador puede observar y modificar su propia estructura y comportamiento". Esto es exactamente como la reflexión en C# funciona, y si bien puede que no lo hayas notado todavía, ser capaz de examinar y cambiar información de tu aplicación durante tiempo de ejecución, ofrece un gran potencial. La reflexión, el cuál es un término general y a su vez es el nombre actual de las capacidades de reflexión en c#, funciona muy pero muy bien, y, de hecho, no es muy difícil de usar. En el siguiente par de capítulos, vamos a profundizar acerca de cómo funciona y entregarte algunos entretenidos ejemplos, los cuales deberían mostrarte lo muy útil que es la reflexión.

Es por esto que, para que puedas comenzar y posiblemente te intereses, acá hay un pequeño ejemplo el cual soluciona una pregunta que yo he visto hacer a muchos programadores nuevos de cualquier lenguaje de programación; ¿Cómo puedo cambiar el valor de una variable durante tiempo de ejecución, solo sabiendo su nombre? Observar esta pequeña aplicación demo para ver la solución y lee los siguientes capítulos para obtener una explicación de las diferentes técnicas usadas.

using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;

namespace ReflectionTest
{
    class Program
    {
        private static int a = 5, b = 10, c = 20;

        static void Main(string[] args)
        {
            Console.WriteLine("a + b + c = " + (a + b + c));
            Console.WriteLine("Please enter the name of the variable that you wish to change:");
            string varName = Console.ReadLine();
            Type t = typeof(Program);
            FieldInfo fieldInfo = t.GetField(varName, BindingFlags.NonPublic | BindingFlags.Static);
            if(fieldInfo != null)
            {
                Console.WriteLine("The current value of " + fieldInfo.Name + " is " + fieldInfo.GetValue(null) + ". You may enter a new value now:");
                string newValue = Console.ReadLine();
                int newInt;
                if(int.TryParse(newValue, out newInt))
                {
                    fieldInfo.SetValue(null, newInt);
                    Console.WriteLine("a + b + c = " + (a + b + c));
                }
                Console.ReadKey();
            }
        }
    }
}

Intenta ejecutar este código y verás cómo funciona. Aparte de las líneas donde de hecho usamos Reflexión, es bastante simple. Ahora, avanza al siguiente capítulo para tener un poco más de teoría acerca de cómo funciona.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!