Sabato
25
Maggio 2013
Primavera dal 21-03 al 20-06 Primavera
04:20

C# .NET esempi

Sollevare un evento all'interno di una classe

30/07/2010 Per generare un evento da una classe (anche user o server control), sono necessari i seguenti passi:
  • dichiarare un delegato (delegate) pubblico che rappresenta la firma dell'evento del tipo
    public delegate void [..nomeEvento..]EventHandler(object source, ..altri parametri..);
    
    dove sender č l'oggetto che ha generato l'evento

  • dichiarare, all'interno della classe, un evento (event) pubblico del tipo definito nel delegato
    public event [..nomeEvento..]EventHandler [..nomeEventoEsposto..];
    

  • dichiarare un metodo protected che solleva l'evento solo se l'evento č gestito (diverso da null)
    protected virtual void On[..nomeEventoEsposto..](...altri parametri...)
    {
      if ([..nomeEventoEsposto..] != null)
        [..nomeEventoEsposto..](this, ...altri parametri...);
    }
    
    utile quando si estende la classe e si vuole gestire l'evento in modo diverso

  • sollevare (raise) l'evento quando serve
    On[..nomeEventoEsposto..](...altri parametri...);
    

Ecco un esempio di una classe che solleva un evento, gestito da un altra classe, ogni volta che il conteggio interno č un multiplo di 10
namespace Sgart
{
  // 1) delegate of event
  public delegate void Mod10EventHandler(object source, int actual);

  public class TestEvent
  {
    // 2)  declare event to expose
    public event Mod10EventHandler Mod10Event;

    // 3) virtual method to raise event
    protected virtual void OnMod10Event(int actual)
    {
      if (Mod10Event != null)
      {
        Mod10Event(this, actual);
      }
    }

    public int InternalCount { get; private set; }

    public TestEvent()
    {
      InternalCount = 0;
    }

    public void UpdateCount()
    {
      InternalCount++;
      if (InternalCount % 10 == 0)
      {
        // 4) raise event
        OnMod10Event(InternalCount);
      }
    }
  }
}

per utilizzarlo:
namespace Sgart
{
  class Program
  {
    static void Main(string[] args)
    {
      //create example class
      TestEvent te = new TestEvent();

      //add event to manage
      te.Mod10Event += new Mod10EventHandler(te_Mod10Event);

      Console.WriteLine("Begin");
      while (te.InternalCount < 25)
      {
        //increase counter ... no otput
        te.UpdateCount();
      }
      Console.WriteLine("End");
    }

    //event raised every 10 count
    static void te_Mod10Event(object sender, int actual)
    {
      Console.WriteLine(string.Format("Actual count: {0}", actual));
    }
  }
}

in pratica incremento il conteggio per 24 volte e come output ottengo:
Begin
Actual count: 10
Actual count: 20
End

Tags: C#, Esempi
dal 1 Gennaio 2004 ci sono stati 2408786 contatti - utenti attuali: 4