События в языке C# содержат всего пару методов add и remove, для подписки и отписки от события, и закрытое поле с мультикаст делегатом, который, собственно, этих самых подписчиков и содержит. Так вот, раз событие – это по сути методы, а методы могут быть виртуальными, можно сделать вывод, что события тоже могут быть виртуальными. По этому рассмотрим следующий пример.
class A
{
public virtual
event UseEventApplication.MyEventhandler
_myEvent;
public void DoEvent()
{
_myEvent();
}
public void AHandler()
{
Console.WriteLine("Событие возбудил
обьект класса А");
}
}
class B:A
{
public override
event UseEventApplication.MyEventhandler
_myEvent;
new public void DoEvent()
{
_myEvent();
}
public void BHandler()
{
Console.WriteLine("Событие возбудил
обьект класса B");
}
}
Думаю что все понятно. Принцип тот же что при переопределение методов. Знаем, что свойства так же можно переопределять. Займемся этим:
Класс А:
public virtual
event UseEventApplication.MyEventhandler EVNT
{
add { _myEvent += value; }
remove { _myEvent -= value; }
}
Класс B:
public override
event UseEventApplication.MyEventhandler EVNT
{
add { _myEvent += value; }
remove { _myEvent -= value; }
}
А вот какой вид имеет точка входа в программу:
namespace UseEventApplication
{
delegate void MyEventhandler();
class Program
{
static void Main()
{
A a = new A();
B b = new B();
a._myEvent+=new
MyEventhandler(a.AHandler);
b._myEvent+=new
MyEventhandler(b.BHandler);
a.DoEvent();
b.DoEvent();
Console.ReadLine();
}
}
}

Оценить статью:
Оценивая статью, Вы подсказываете нам насколько данная информация стала
полезной именно для Вас. Мы ожидаем, прежде всего, оценку доступности материала
для понимания и простоты его изложения. Дополнительные комментари, вопросы,
дополнения и замечания Вы можете указать на странице
От Вас
Частичное, или полное копирование материала данной
статьи возможно лишь при размещении ссылки на данную страницу.