Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.08.2016, 12:57   #1
BadCats
Пользователь
 
Аватар для BadCats
 
Регистрация: 31.01.2016
Сообщений: 67
Сообщение Переопределение virtual события

всем привет, имеется такой пример:
Код:
 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 , то мы обязаны были бы его переопределить, на как видно, что мы этого не делаем. Так, что же подразумевается под понятием "абстрактное событие" ?
BadCats вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переопределение функции RAFA91 Общие вопросы .NET 5 30.09.2015 15:41
Переопределение события OnMouseDown Aleksandr_59 Компоненты Delphi 4 23.05.2012 17:59
События в WPF. Обращение к компонентам формы из события Casper-SC Общие вопросы .NET 3 25.07.2010 19:03
Переопределение события OnClick в динамическом объекте-компоненте CyberJohn Общие вопросы Delphi 8 06.01.2010 15:56
Переопределение реакции на события ByWatt Общие вопросы Delphi 1 20.12.2007 17:22