всем привет, имеется такой пример:
public delegate void EventDelegate();
interface IInterface
{
event EventDelegate MyEvent; // Абстрактное событие.
}
public class BaseClass : IInterface
{
EventDelegate myEvent = null;
public virtual event EventDelegate MyEvent // Виртуальное событие.
{
add { myEvent += value; }
remove { myEvent -= value; }
}
public void InvokeEvent()
{
myEvent.Invoke();
}
}
public class DerivedClass : BaseClass
{
public override event EventDelegate MyEvent // Переопределенное событие.
{
add
{
base.MyEvent += value;
Console.WriteLine("К событию базового класса был прикреплен обработчик - {0}", value.Method.Name);
}
remove
{
base.MyEvent -= value;
Console.WriteLine("От события базового класса был откреплен обработчик - {0}", value.Method.Name);
}
}
}
class Program
{
// Методы обработчики события.
static private void Handler1()
{
Console.WriteLine("Обработчик события 1");
}
static private void Handler2()
{
Console.WriteLine("Обработчик события 2");
}
static void Main()
{
DerivedClass instance = new DerivedClass();
// Присоединение обработчиков событий.
instance.MyEvent += new EventDelegate(Handler1);
instance.MyEvent += new EventDelegate(Handler2);
// Метод который вызывает событие.
instance.InvokeEvent();
Console.WriteLine(new string('-', 20));
// Открепляем Handler2().
instance.MyEvent -= new EventDelegate(Handler2);
instance.InvokeEvent();
// Delay.
Console.ReadKey();
}
}
К данному примеру у меня три вопроса:
1)переопределение события с помощью virtual - также как и метод InvokeEvent в данном примере - позволяет классам наследникам вызывать событие путем переопределения?
2)Если у меня одно событие - можно ли подписывать при переопределении это одно событие на разные обработчики переопределяя его в разные классы - т.е я имею ввиду, если я одно виртуальное событие переопределил в три разных класса и в каждом из них подписал на разные обработчики событий, то если я затем создам экземпляр конкретного класса, то у меня сработают только обработчики из него , или из всех трех классов - т.к я переопределил одно событие в эти три класса?
3)также меня интересует эта строка:
event EventDelegate MyEvent; // Абстрактное событие.
- как видно из комментария, автор курса говорит, что это абстрактное событие, но как я понимаю, это не тоже самое, что и с ключевым словом abstract ? я имею ввиду, что если по сущности это было бы тоже самое , что и с ключевым словом abstract , то мы обязаны были бы его переопределить, на как видно, что мы этого не делаем. Так, что же подразумевается под понятием "абстрактное событие" ?