So che gli eventi sono sempre associati ai delegati. Ma mi manca un uso fondamentale degli eventi e sto cercando di capirlo.Perché utilizzare gli eventi per ciò che posso fare con i delegati?
Ho creato un semplice programma di eventi, come di seguito, e funziona perfettamente.
namespace CompleteRef3._0
{
delegate void someEventDelegate();
class EventTester
{
public event someEventDelegate someEvent;
public void doEvent()
{
if (someEvent != null) someEvent();
}
}
class Program
{
static void EventHandler1()
{
Console.WriteLine("Event handler 1 called..");
}
static void EventHandler2()
{
Console.WriteLine("Event handler 2 called..");
}
static void EventHandler3()
{
Console.WriteLine("Event handler 3 called..");
}
static void Main(string[] args)
{
EventTester evt = new EventTester();
evt.someEvent += EventHandler1;
evt.someEvent += EventHandler2;
evt.someEvent += EventHandler3;
evt.doEvent();
Console.ReadKey();
}
}
}
Ho sostituito la dichiarazione dell'evento con i delegati. Cioè ho sostituito la riga evento pubblico someEventDelegate someEvent; con someEventDelegate someEvent; sul programma sopra, e ottengo ancora lo stesso risultato. Ora, ero confuso sul motivo per cui abbiamo bisogno di usare Eventi, se può essere raggiunto solo dai delegati. Qual è il vero uso degli eventi?
Il programma modificato senza eventi è la seguente -
namespace CompleteRef3._0
{
delegate void someEventDelegate();
class EventTester
{
someEventDelegate someEvent;
public void doEvent()
{
if (someEvent != null) someEvent();
}
}
class Program
{
static void EventHandler1()
{
Console.WriteLine("Event handler 1 called..");
}
static void EventHandler2()
{
Console.WriteLine("Event handler 2 called..");
}
static void EventHandler3()
{
Console.WriteLine("Event handler 3 called..");
}
static void Main(string[] args)
{
EventTester evt = new EventTester();
evt.someEvent += EventHandler1;
evt.someEvent += EventHandler2;
evt.someEvent += EventHandler3;
evt.doEvent();
Console.ReadKey();
}
}
}
In breve, esponendo le interruzioni del delegato pubblico ** incapsulamento **. – Timeless