Example #1
0
        // MailManager викликає цей метод для сповіщення об'єкту Fax про отримання нового поштового повідомлення
        private void PagerMsg(Object sender, NewMailEventArgs e)
        {
            // 'sender' використовується для взаємодії з об'єктом MailManager, якщо буде потрібно передати йому якусь інформацію.
            // 'e' визначає додаткову інформацію про подію, яку побажає надати MailManager.

            // Зазвичай розміщений тут код відправляє повідомлення по факсу. Тестова реалізація виводить інформацію на консоль.
            Console.WriteLine("Pagering mail message:");
            Console.WriteLine(" From={0}, To={1}, Subject={2}", e.From, e.To, e.Subject);
        }
Example #2
0
        // Етап 4. Визначення методу, що перетворює вхідну інформацію в бажану подію
        public void SimulateNewMail(String from, String to, String subject)
        {
            Console.WriteLine("Отримано нове повідомлення! Сповіщую підписників...");

            // Створити об'єкт для збереження інформації, яку потрібно передати отримувачам сповіщень
            NewMailEventArgs e = new NewMailEventArgs(from, to, subject);

            // Викликати віртуальний метод, який сповіщує об'єкт про подію
            // Якщо жоден з похідних типів не перевизначає цей метод, об'єкт сповістить всіх зареєстрованих одержувачів сповіщення
            OnNewMail(e);
        }
Example #3
0
        /* Тут NewMail - ім'я події, а його типом є EventHandler<NewMailEventArgs>. Це означає, що одержувачі
         * сповіщення про подію повинні надавати метод зворотнього виклику, прототип якого відповідний до типу-
         * делегату EventHandler<NewMailEventArgs>. Так як узагальнений делегат System.EventHandler визначений наступним чином:
         * public delegate void EventHandler<TEventArgs>(Object sender, TEventArgs e) where TEventArgs: EventArgs;
         * Тому прототип методу повинен виглядати ось так:
         * void MethodName(Object sender, NewMailEventArgs e); */



        // Етап 3. Визначення методу відповідального за сповіщення зареєстрованих об'єктів про подію
        // УВАГА! Якщо цей клас ізольований (sealed), потрібно створити метод закритим і невіртуальним
        protected virtual void OnNewMail(NewMailEventArgs e)
        {
            // Зберегти посилання на делегат в тимчасовій змінній для забезпечення безпеки потоків
            EventHandler <NewMailEventArgs> temp = Volatile.Read(ref NewMail);

            // Якщо є об'єкти, які зареєстровані для отримання сповіщень про подію, сповіщуємо їх
            if (temp != null)
            {
                temp(this, e);
            }

            /* ПРИМІТКА. Visual Studio пропонує спростити 2 попередні рядки коду (використовуючи "синтаксичний цукор") таким чином:
             * Volatile.Read(ref NewMail)?.Invoke(this, e); */
        }