Wiem, że wydarzenia są zawsze związane z Delegatami. Ale brakuje mi jakiegoś podstawowego wykorzystania wydarzeń i próbuję to zrozumieć.Po co używać wydarzeń, co mogę zrobić z Delegatami?
stworzyłem prosty program wydarzeń, jak poniżej, i to działa perfekcyjnie.
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();
}
}
}
Zastąpiłem deklarację zdarzenia delegatami. To ja zastąpiłem linię publiczną publiczne wydarzenie someEventDelegate someEvent; z someEventDelegate someEvent; w powyższym programie i nadal otrzymuję ten sam wynik. Teraz byłem zdezorientowany, dlaczego potrzebujemy korzystać z Wydarzenia, jeśli może to być osiągnięte tylko przez Delegatów. Jakie jest prawdziwe wykorzystanie wydarzeń?
Zmodyfikowany Program bez zdarzeń jest jak poniżej -
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();
}
}
}
Krótko mówiąc, udostępnianie przerw na delegacje publiczne ** enkapsulacja **. – Timeless