TOC

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

Reflection:

Reflection introduction

In Wikipedia viene riportata la seguente affermazione "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 C# lavora, e mentre puoi ancora non capacitarti di ciò, essere in grado di esaminare e modificare le informazioni della tua 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 utili sia la Reflection.

Per partire, riportiamo 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 a runtime, conoscendone solamente il nome? Diamo un'occhiata alla semplice applicazione demo per una soluzione, e leggi i capitoli successivi per spiegazioni di 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. Inoltre 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!