示例#1
0
        // Этап 4. Определение метода, преобразующего входную
        // информацию в желаемое событие
        public void SimulateNewMail(String from, String to, String subject)
        {
            // Создать объект для хранения информации, которую
            // нужно передать получателям уведомления
            NewMailEventArgs e = new NewMailEventArgs(from, to, subject);

            // Вызвать виртуальный метод, уведомляющий объект о событии
            // Если ни один из производных типов не переопределяет этот метод,
            // объект уведомит всех зарегистрированных получателей уведомления
            OnNewMail(e);
        }
示例#2
0
 // MailManager вызывает этот метод для уведомления
 // объекта Fax о прибытии нового почтового сообщения
 void FaxMsg(object sender, NewMailEventArgs e)
 {
     // 'sender' используется для взаимодействия с объектом MailManager,
     // если потребуется передать ему какую-то информацию
     // 'e' определяет дополнительную информацию о событии,
     // которую пожелает предоставить MailManager
     // Обычно расположенный здесь код отправляет сообщение по факсу
     // Тестовая реализация выводит информацию на консоль
     Console.WriteLine("Faxing mail message:");
     Console.WriteLine(" From={0}, To={1}, Subject={2}",
                       e.From, e.To, e.Subject);
 }
示例#3
0
        // Этап 3. Определение метода, ответственного за уведомление
        // зарегистрированных объектов о событии
        // Если этот класс изолированный, нужно сделать метод закрытым
        // или невиртуальным
        protected virtual void OnNewMail(NewMailEventArgs e)
        {
            // Сохранить ссылку на делегата во временной переменной
            // для обеспечения безопасности потоков
            EventHandler <NewMailEventArgs> temp = Volatile.Read(ref NewMail);

            // Если есть объекты, зарегистрированные для получения
            // уведомления о событии, уведомляем их
            if (temp != null)
            {
                temp(this, e);
            }
        }