Morpheusweb.it - Risorse per webmaster: script, ASP.NET, C#, Visual Basic .Net, tutorial, asp, javascript, css, php, html, java, ADO, VBScript, forms, frames, Active Server Pages, Dynamic HTML, database, gratis per webmaster e webdesigner

Delegati ed Eventi in C#

Delegati ed Eventi


Delegate

I delegate sono dei tipi che consentono delle chiamate di metodo indirette. Una istanza di delegate contiene un puntatore ad un certo numero di metodi, e l'invocazione del delegate, consente la chiamata del metodo. Per chi conoscesse C++, i Delegate corrispondono alle funzioni di callback.

Per utilizzare i Delegate occorre fare tre cose:
  • Dichiararli
  • Instanziarli
  • Richiamarli

Dichiarare ed istanziare un Delegate

Vediamo un esempio:

using System;
public class Sample
{
  //Dichiaro il delegate
  public delegate string metodoDelegate(int numero);
  //La mia classe
  public class classeDelegate
  {

    public string controllaSegno(int numero)
    {
      if (numero = 0)
        return("uguale di zero");
      else if (numero < 0)
        return("Minore di zero");
      else
        return ("uguale a zero");
      }
    }

    public static void Main()
    {
        // Creo i delegati.
        classeDelegate c = new classeDelegate();
        metodoDelegate d = new metodoDelegate(c.controllaSegno);

        // Invoco i delegati.
        int[] numeri = {-1,2,19,-2,0,4};
        foreach (int num in numeri)
          Console.WriteLine("Il numero {0} è {1}; ", num, d(num));
      }
}



La riga public delegate String metodoDelegate(int numero); dichiara il delegate, la classe classeDelegate contiene i metodi richiamabili

Nel Main istanziamo la classe ed il metodo Delegate, e poi lo richiamiamo passandogli dei valori diversi.

L'output sara:

Il numero -1 è minore di zero;
Il numero 2 è maggiore di zero;
Il numero 19 è maggiore di zero;
Il numero -2 è minore di zero;
Il numero 0 è uguale a zero;
Il numero 4 è maggiore di zero;

Eventi

Gli eventi sono simili alle chiamate di metodo, ma a differenza di questi ultimi, la loro invocazione deve essere generata esternamente.
Un esempio classico è la pressione di un pulsante in una interfaccia grafica o una pagina web.
Gli eventi sono realizzati tramite un tipo particolare di Delegate, detti "multicast".

Si deve creare un delegate e poi "sottoscrivere" l'evento tramite la sintassi:

classe.Evento += new GestoreEvento.EventDelegate(funzione);

Vediamo un esempio pratico:

using System;
//Dichiaro il delegate
delegate void testEventHandler(object source, string messaggio);
class test
{
    //L'evento
    public event testEventHandler testEvento;
    //La funzione che scatena l'evento
    public void Evento(string messaggio)
    {
        Console.WriteLine("Evento!");
        if (testEvento != null)
        {
            testEvento(this, messaggio);
        }
    }
}
public class EventSample
{
    public EventSample() {}
    static void Main()
    {
        //istanzio la classe
        test b = new test();
        //Agiungo il gestore di eventi
        b.testEvento += new testEventHandler(onTestAction);
        //Scateno l'evento
        b.Evento("ciao, sono un evento!");
    }
    //La funzione che gestisce l'evento
    public static void onTestAction(object source, string messaggio)
    {
        Console.WriteLine("Siamo all'interno del gestore di eventi.");
        Console.WriteLine("Messaggio: " + messaggio);
    }
}


Il Main istanzia una classe "test" che contiene un gestore di eventi,
viene poi sottoscritto il metodo che risponde agli eventi ed infine scatenato l'evento

Ecco l'output:

Evento!
Siamo all'interno del gestore di eventi.
Messaggio: ciao, sono un evento!

Stampa la pagina


 

Inizio pagina

risorse per webmaster