TOC

This article has been localized into Italian by the community.

Reflection:

Introduzione a Reflection

Wikipedia dice che "In informatica, la riflessione o reflection è la capacità di un programma di eseguire elaborazioni che hanno per oggetto il programma stesso, e in particolare la struttura del suo codice sorgente. " Questo è esattamente come la Reflection funziona in C#, e, mentre potresti ancora non rendertene conto a questo punto, essere in grado di esaminare e modificare le informazioni dell'applicazione durante l'esecuzione, offre grandissime potenzialità. Reflection, che è sia un termine generico, che l'attuale nome delle capacità di reflection di C#, funziona davvero molto molto bene, e non è così difficile da usare. Nei prossimi capitoli, affronteremo più nel dettaglio come funziona e forniremo alcuni esempi, che potranno mostrarti quanto sia utile la Reflection.

Comunque, per partire e, speriamo, renderlo interessante, ecco di seguito un piccolo esempio. Questo risolve una problematica che ho riscontrato da tanti che arrivano da qualunque altro linguaggio di programmazione: come posso modificare il valore di una variabile durante l'esecuzione, conoscendone solamente il nome? Diamo un'occhiata a questa semplice applicazione demo per una soluzione, e leggi i capitoli successivi per spiegazioni sulle diverse tecniche utilizzate.

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();
            }
        }
    }
}

Prova ad eseguire il codice e vedi come funziona. A parte le linee dove abbiamo utilizzato la Reflection, è tutto molto semplice. Ora andiamo al prossimo capitolo per un po' più di teoria sul suo funzionamento.


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!