Latest web development tutorials

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

Сообщение: О. К.