Latest web development tutorials

C #을 이벤트 (이벤트)

(이벤트) 기본적으로 말한다 이벤트는이러한 시스템에서 생성 된 알림 등의 버튼을 클릭, 마우스 움직임 등, 또는 일부 신흥와 같은 사용자 작업이다. 애플리케이션은 이벤트가 발생할 때 이벤트에 응답 할 필요가있다. 예를 들어, 인터럽트. 이벤트는 프로세스 간 통신에 사용됩니다.

대리자 이벤트를 사용하여

이벤트 클래스를 선언하고, 이벤트 핸들러 또는 다른 클래스와 연관된 동일한 대리자 클래스를 사용하여 생성된다. 클래스 출판 이벤트에 대한 이벤트가 포함되어 있습니다. 이것은출판사 (출판사) 클래스라고합니다.기타 이벤트 유형이피드 리더 (가입자) 클래스라고 받아 들인다.구독 (게시자 가입자) 모델- 게시를사용하여 이벤트.

출판사 (출판사) 이벤트를 포함 대리자 정의 된 개체입니다.이벤트와 대표 사이의 접촉은이 객체에 정의되어 있습니다. 출판사 (출판사) 클래스 객체는이 이벤트를 호출하고 다른 개체를 통지한다.

급지 장치 (가입자)는 받아 이벤트와 이벤트 핸들러 객체를 제공한다.출판사에서 (게시자) 클래스 대리자 호출 피드 리더 (가입자) 클래스 메소드 (이벤트 핸들러).

문 이벤트 (이벤트)

클래스 내부에 선언 된 경우, 먼저 이벤트의 대리자 형식을 선언해야합니다. 예를 들면 :

공공 대리인이 무효 BoilerLogHandler (문자열 상태);

그리고,이벤트의 키워드를 사용하여, 이벤트 자체 선언

// 이벤트 위임 공개 행사 BoilerLogHandler BoilerEventLog의 위의 정의에 기초하여,

위의 코드는 대리자를 정의하고 대리자가 호출 될 때BoilerLogHandler라는BoilerEventLog라는 이름의이벤트는,이벤트가 생성됩니다.

예 1

시스템을 이용하여;
네임 스페이스 SimpleEvent
{
   시스템을 이용하여;

   공용 클래스에 EventTest
   {
      개인 int 값;

      공공 대리인이 무효 NumManipulationHandler ();

      공개 이벤트 NumManipulationHandler ChangeNum;

      보호 된 가상 무효가 OnNumChanged ()
      {
         경우 (ChangeNum! = null이)
         {
            ChangeNum ();
         }
         그렇지 않으면
         {
            Console.WriteLine는 ( "이벤트 해고!");
         }

      }
      공중에 EventTest (INT의 N)
      {
         SetValue는 (N);
      }
      공공 무효 SetValue를 (INT의 N)
      {
         경우 (값! = N)
         {
            값 = N;
            () OnNumChanged;
         }
      }
   }
   공용 클래스 MainClass
   {
      공공 정적 무효 메인 ()
      {
         에 EventTest 전자 = 새에 EventTest (5);
         e.SetValue (7);
         e.SetValue (11);
         Console.ReadKey ();
      }
   }
}

상기 코드는 컴파일되고 실행될 때, 다음과 같은 결과를

이벤트 횟수!
이벤트 횟수!
이벤트 횟수!

예 2

이 예에서는, 문제의 프로그램에 대한 간단한 온수 보일러 시스템을 제공한다. 유지 보수 기술자는 보일러를 확인하면, 보일러 온도 및 압력을 자동으로 로그 파일에 기록 유지 엔지니어 참고로 할 것이다.

시스템을 이용하여;
System.IO을 사용함;

네임 스페이스 BoilerEventAppl
{

   // 보일러 클래스 수준의 보일러
   {
      개인 INT 온도;
      개인 INT 압력;
      공공 보일러 (INT의 t, INT 피)
      {
         온도 = t;
         압력 = 피;
      }

      공공 INT getTemp ()
      {
         온도를 반환;
      }
      공공 INT의 getPressure ()
      {
         압력을 반환;
      }
   }
   // 이벤트 게시자 클래스 DelegateBoilerEvent
   {
      공공 대리인이 무효 BoilerLogHandler (문자열 상태);

      // 이벤트 위임 공개 행사 BoilerLogHandler BoilerEventLog의 위의 정의에 기초하여,

      공공 무효 LogProcess ()
      {
         문자열 발언 = "O. K";
         보일러 B = 새로운 보일러 (100, 12);
         t = INT b.getTemp ();
         p = INT b.getPressure ();
         경우 (t> 150 || t <80 || p <12 || P> 15)
         {
            발언 = "유지 관리 필요";
         }
         OnBoilerEventLog는 ( "정보 로깅 : \ n을을");
         OnBoilerEventLog ( "Temparature"+ t + "\ nPressure :"+ P);
         OnBoilerEventLog ( "\ nMessage :"+ 발언)
      }

      보호 무효 OnBoilerEventLog (문자열 메시지)
      {
         경우 (BoilerEventLog! = null이)
         {
            BoilerEventLog (메시지);
         }
      }
   }
   이용 약관 등의 예약은 // 로그 파일 클래스 BoilerInfoLogger에 기록
   {
      하여 FileStream의 FS;
      StreamWriter를 자상;
      공공 BoilerInfoLogger (캐릭터 이름)
      {
         FS = 새로운하여 FileStream (파일 이름,를 FileMode.APPEND, FileAccess.Write);
         자상 한 = 새에서는 StreamWriter (FS);
      }
      공공 무효 로거 (문자열 정보)
      {
         sw.WriteLine (정보);
      }
      공공 무효 닫기 ()
      {
         sw.Close ();
         fs.Close를 ();
      }
   }
   // 이벤트 구독 공용 클래스 RecordBoilerInfo입니다
   {
      정적 무효 로거 (문자열 정보)
      {
         Console.WriteLine (정보);
      로거의} // 끝

      정적 무효 메인 (문자열 []에 인수)
      {
         BoilerInfoLogger의 filelog = 새로운 BoilerInfoLogger ( "E : \\ boiler.txt을");
         DelegateBoilerEvent boilerEvent = 새로운 DelegateBoilerEvent ();
         boilerEvent.BoilerEventLog + = 새 
         DelegateBoilerEvent.BoilerLogHandler (로거);
         boilerEvent.BoilerEventLog + = 새 
         DelegateBoilerEvent.BoilerLogHandler (filelog.Logger);
         boilerEvent.LogProcess ();
         Console.ReadLine ();
         filelog.Close ();
      주의} // 끝

   } // RecordBoilerInfo의 끝
}

상기 코드는 컴파일되고 실행될 때, 다음과 같은 결과를

정보 로깅 :

온도 (100)
압력 (12)

메시지 : O. K