C#에서 이벤트는 클래스나 객체 내에서 발생하는 특정한 동작을 다른 클래스나 객체에 알리기 위한 메커니즘을 제공하는 기능을 갖는다.
① 사용 조건
이벤트를 사용하기 위해서는, 델리게이트(대리자)가 선제적으로 존재해야 한다.
이벤트를 포함하고 있는 클래스는 호출할 수 있는 맴버 함수가 있어야 한다.
② 이벤트란?
클래스(객체)가 서로 참조하는 것을 줄이기 위해 사용함.
외부에서 객체에 접근하는 것을 제어하고 싶을 때 사용한다.
증감 연산자만 사용할 수 있다. (델리게이트와 차이점)
이벤트를 사용하려면 먼저 두 가지 역할을 가진 클래스가 필요하다.
이벤트 제공자 (Event Provider)
이벤트를 발생시키는 역할을 하는 클래스. 이 클래스 내에서 이벤트를 정의하고, 이벤트가 발생할 때 이를 호출해주어야 한다. 이벤트를 발생시키는 역할을 한다.
이벤트 구독자 (Event Subscriber)
이벤트를 감지하고 그에 대한 처리를 하는 역할을 하는 클래스. 이 클래스는 이벤트가 발생했을 때 이를 감지하고 특정 동작을 수행한다.
EventHandler는 object와 EventArgs를 기본으로 파라미터로 받는 델리게이트가 설정되어 있다.
EventStart는 event 사용을 위한, 호출 가능한 맴버함수 역할을 하고 있다.
EventHandler는 대입 연산자가 가능하지 않다.
+=, 혹은 -=을 사용해야 한다.
델리게이트 혹은 무명 함수를 이용하여, eventHandler의 인스턴스를 생성한다.
ChildEventArgs로 형변환하여 e를 가져옴
data.Msg 출력
ChildEventArgs를 생성하고 "childEvent Args data"를 전달하는 arg 객체 생성
messageHandler 객체의 EventStart 메서드를 호출하고 arg 객체를 인수로 전달
e 객체의 Msg 속성을 출력
messageHandler 객체의 EventStart2 메서드를 호출하고 arg 객체를 인수로 전달
파라미터를 EventArgs가 아닌 ,
ChildEventArgs 클래스로 받는 맴버 함수이다.
먼저, Msg 속성을 정의하고
그 다음 줄에서는 EventArgs를 Base로 하여, 생성자를 정의한다.
string 형식의 msg를 받아서, 지역변수인 Msg에 초기화한다.