C # событие (Event)
Событие (Event) в основном говорит , это действие пользователя, такие как кнопки, нажатие кнопки мыши, перемещения мыши и т.д., или некоторые страны с формирующимся, таких как уведомлений , создаваемых системой.Применение необходимо реагировать на события, когда происходит событие. Например, прерывание. События используются для связи между процессами.
Используя событие делегат
И событие генерируется в объявлении класса, и используя тот же класс делегата, связанный с обработчиком событий или других классов. Класс содержит событие для публикации событий. Это называетсяиздатель (издатель) класс.Другие принимают тип события, называетсячтения каналов (абонент) класса.События с использованиемпубликации - модель подписки (издатель-абонента).
Издательство (издатель) и содержит событие является делегатом определенные объекты.Контакт между событиями и делегатами также определены в этом объекте. объект Издательство (издатель) класс называет это событие, и уведомляет другие объекты.
Устройство подачи (абонент) является признанным событие и указать объект - обработчик события.В Publisher (издатель) класса делегата вызова для чтения каналов (абонент) метод класса (обработчик события).
Заявление о событиях (Event)
В случае объявленной внутри класса, вы должны сначала объявить тип делегата для события. Например:
Открытый делегат (статус строки) недействительным BoilerLogHandler;
Затем объявить само событие, с помощью ключевого словасобытия:
// Исходя из приведенного выше определения делегата события публичного мероприятия BoilerLogHandler BoilerEventLog;
Приведенный выше код определяет делегата и событие с именемBoilerEventLogимениBoilerLogHandler,событие будет генерироваться , когда делегат вызывается.
Пример 1
с помощью системы; Пространство имен SimpleEvent { с помощью системы; общественного класса EventTest { частное значение INT; Открытый делегат NumManipulationHandler недействительным (); общественное мероприятие NumManipulationHandler ChangeNum; защищенный виртуальный пустота OnNumChanged () { если (ChangeNum! = NULL) { ChangeNum (); } еще { Console.WriteLine ( "Событие уволен!"); } } общественного EventTest (Int N) { SetValue (п); } общественного недействительными SetValue (Int N) { если (значение! = п) { Значение = п; OnNumChanged (); } } } общественного класса MainClass { государственной статической силы Main () { EventTest е = новый EventTest (5); e.SetValue (7); e.SetValue (11); Console.ReadKey (); } } }
Когда приведенный выше код компилируется и выполняется, он дает следующие результаты:
Событие сгорело! Событие сгорело! Событие сгорело!
Пример 2
Этот пример обеспечивает простую систему водогрейный котел для приложений и устранения неисправностей. Когда инженер по техническому обслуживанию, чтобы проверить котел, температура котла и давление будет как инженер по техническому обслуживанию нот автоматически записываются в лог-файл.
с помощью системы; использованием System.IO; пространство имен BoilerEventAppl { // Класс котла Класс котла { частное INT темп; частное INT давление; общественного котла (INT т, INT р) { Темп = т; давление = р; } общественное INT getTemp () { обратки; } общественное INT getPressure () { вернуть давление; } } // Событие Издатель класса DelegateBoilerEvent { Открытый делегат (статус строки) недействительным BoilerLogHandler; // Исходя из приведенного выше определения делегата события публичного мероприятия BoilerLogHandler BoilerEventLog; общественного недействительными LogProcess () { струнные замечания = "О. К"; Котел B = новый котел (100, 12); INT т = b.getTemp (); INT р = b.getPressure (); если (т> 150 || т <80 || р <12 || р> 15) { замечания = "Необходимо обслуживание"; } OnBoilerEventLog ( "Ведение журнала Info: \ п"); OnBoilerEventLog ( "Temparature" + T + "\ nPressure:" + р); OnBoilerEventLog ( "\ nMessage:" + примечания); } защищенный недействительным OnBoilerEventLog (строка сообщения) { если (BoilerEventLog! = NULL) { BoilerEventLog (сообщение); } } } Условия такие оговорки // записывается в класс BoilerInfoLogger файла журнала { FileStream фс; StreamWriter ЮЗ; BoilerInfoLogger общественности (строка файла) { фс = новый FileStream (имя файла, FileMode.Append, FileAccess.Write); SW = новый StreamWriter (фс); } общественного недействительными Logger (строка данные) { sw.WriteLine (информация); } общественного недействительными Close () { sw.Close (); fs.Close (); } } // Подписка на событие является общественным классом RecordBoilerInfo { статической силы Logger (строка данные) { Console.WriteLine (информация); } // Конец Logger статической силы основных (String [] агдз) { BoilerInfoLogger FileLog = новый BoilerInfoLogger ( "E: \\ boiler.txt"); DelegateBoilerEvent boilerEvent = новый DelegateBoilerEvent (); boilerEvent.BoilerEventLog + = новый DelegateBoilerEvent.BoilerLogHandler (Logger); boilerEvent.BoilerEventLog + = новый DelegateBoilerEvent.BoilerLogHandler (filelog.Logger); boilerEvent.LogProcess (); Console.ReadLine (); filelog.Close (); } // Конец главной } // Конец RecordBoilerInfo }
Когда приведенный выше код компилируется и выполняется, он дает следующие результаты:
Вход информация: Температура 100 Давление 12 Сообщение: О. К.