Sabato
25
Maggio 2013
Primavera04:20
C# .NET esempi
Sollevare un evento all'interno di una classe
- 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...);
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
