Ich weiß, Ereignisse sind immer Delegaten zugeordnet. Aber ich vermisse etwas Kernnutzung von Events und versuche das zu verstehen.Warum Ereignisse für das, was ich mit Delegaten tun kann, verwenden?
Ich erstellte ein einfaches Event-Programm, wie unten, und es funktioniert einwandfrei.
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();
}
}
}
Ich ersetzte die Event-Deklaration durch Delegaten. Das ist ich ersetzte die Linie öffentliches Ereignis someEventDelegate someEvent; mit someEventDelegate someEvent; auf das obige Programm, und ich bekomme immer noch das gleiche Ergebnis. Jetzt war ich verwirrt, warum wir Ereignisse verwenden müssen, wenn es nur von Delegierten erreicht werden kann. Wie werden Events wirklich genutzt?
Das modifizierte Programm ohne Ereignisse ist als unten -
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();
}
}
}
Kurz gesagt, öffentliche Delegierten bricht ** Einkapselung **. – Timeless