이벤트 발생시키기
업데이트: 2007년 11월
이벤트 기능은 이벤트 데이터를 제공하는 클래스, 이벤트 대리자, 이벤트를 발생시키는 클래스 등 서로 연관된 세 개의 요소에서 제공합니다. .NET Framework에는 이벤트와 관련된 클래스 및 메서드에 대한 명명 규칙이 있습니다. 클래스에서 EventName이라는 이벤트가 발생되기 위해서는 다음 요소가 필요합니다.
이벤트 데이터를 갖는 EventNameEventArgs라는 이름의 클래스. 이 클래스는 System.EventArgs에서 파생되어야 합니다.
EventNameEventHandler라는 이름의 이벤트 대리자
이벤트를 발생시키는 클래스. 이 클래스는 이벤트 선언(EventName)과 이벤트를 발생시키는 메서드(On*EventName)*를 제공해야 합니다.
.NET Framework 클래스 라이브러리 또는 타사 클래스 라이브러리에 데이터 클래스와 이벤트 대리자 클래스가 이미 정의되어 있는 경우에는 이들 클래스를 별도로 정의하지 않아도 됩니다. 예를 들어, 이벤트에서 사용자 지정 데이터를 사용하지 않는 경우 이벤트 데이터의 System.EventArgs를 사용하고 대리자의 System.EventHandler를 사용할 수 있습니다.
클래스에서 event 키워드를 사용하여 이벤트 멤버를 정의합니다. event 키워드를 발견하는 경우 컴파일러에서는 다음 전용 멤버를 만듭니다.
private EventNameHandler eh = null;
또한 컴파일러는 add_EventName과 remove_EventName이라는 두 가지 공용 메서드를 만듭니다. 이들 메서드는 이벤트 대리자 eh에 대리자를 조합하거나 제거하는 데 사용되는 이벤트 후크입니다. 상세 내용은 프로그래머가 볼 수 없도록 숨겨집니다.
참고: |
---|
C# 및 Visual Basic 2005 이외의 언어에서는 이벤트 멤버에 해당하는 코드를 컴파일러에서 자동으로 생성하지 않을 수도 있는데, 이런 경우에는 사용자가 이벤트 후크나 전용 대리자 필드를 명시적으로 정의해야 합니다. |
이벤트 구현을 정의했으면 이벤트를 발생시킬 시기를 결정해야 합니다. 이벤트를 정의한 클래스 또는 파생 클래스에서 보호된 OnEventName 메서드를 호출하여 이벤트를 발생시킵니다. OnEventName 메서드는 대리자를 호출하고 이벤트 관련 데이터를 전달하여 이벤트를 발생시킵니다. 이벤트의 대리자 메서드는 이벤트의 작업을 수행하거나 이벤트 관련 데이터를 처리할 수 있습니다.
참고: |
---|
또한 보호된 OnEventName 메서드는 대리자를 이벤트에 첨부하지 않고도 파생 클래스에서 이벤트를 재정의할 수 있게 합니다. 파생된 클래스는 등록된 대리자가 이벤트를 수신할 수 있도록 기본 클래스의 OnEventName 메서드를 항상 호출해야 합니다. |
다른 클래스에서 발생한 이벤트를 처리하려면 대리자 메서드를 이벤트에 추가합니다. .NET Framework에서의 이벤트에 대한 대리자 모델에 익숙하지 않은 경우에는 이벤트 및 대리자를 참조하십시오.