Мне было интересно, какое точное использование событий находится в C#. Я все еще участвую в обучении C#, поэтому я, возможно, что-то пропустил, но можно просто использовать делегатов.
В этом примере я написал класс с методом, который насчитывает от 0 до 2^64, и каждый раз, когда он достигает нескольких тысяч, возникает событие. Вот код:Использование ключевого слова события в C#
namespace EventDelegate
{
class Program
{
static void Main(string[] args)
{
EventRaiserClass _eventraiser = new EventRaiserClass();
_eventraiser.handler = SomeEventHandler;
_eventraiser.handler += AnotherEventHandler;
_eventraiser.Loop();
Console.Read();
}
static void SomeEventHandler(object sender, EventArgs args)
{
Console.WriteLine("Event raised");
}
static void AnotherEventHandler(object sendr, EventArgs args)
{
Console.WriteLine("Event raised (Another handler)");
}
}
public delegate void Handler(object sender, EventArgs args);
class EventRaiserClass
{
public Handler handler;
public void Loop()
{
for (long i = 0; i < Int64.MaxValue; i++)
{
if ((i % 1000) == 0)
{
EventArgs args = new EventArgs();
RaiseEvent(args);
System.Threading.Thread.Sleep(1000);
}
}
}
private void RaiseEvent(EventArgs args)
{
if (handler != null)
handler(this, args);
}
}
}
Что бы разница была, если бы я объявил переменную handler
делегата, чтобы быть событием, как этот public event Handler handler
.
Извините, если я был немного расплывчатым или отсутствовал что-то очевидное, но мне просто интересно, если что-то еще происходит за кулисами при использовании event
, а просто с помощью делегатов или если это просто для удобства чтения.
возможно дубликат [Понимание событий и обработчиков событий в C#] (http://stackoverflow.com/questions/803242/understanding-events-and-event-handlers-in-c-sharp) –
См. http://csharpindepth.com/Articles/Chapter2/Events.aspx –
Спасибо, я посмотрю. –