41.2 이벤트와 대리자를 사용하여 메서드 등록 및 호출하기
대리자는 이벤트를 위한 중간 단계고, 이벤트는 메서드 여러 개, 특히 이벤트 처리 전용 메서드라는 이벤트 처리기(핸들러) 메서드를 등록한 후 실행시키는 역할을 합니다. 주로 운영 체제 레벨에서 마우스 및 키보드 등 장치와 같이 연동될 때 사용하는 프로그램 구조입니다. 일반적인 프로그래밍 환경에서는 많이 사용하지 않을 듯하나, 컨트롤 및 컴포넌트 제작 분야로 깊이 들어가다 보면 이벤트를 빈번하게 작성하곤 합니다.
이번에는 이벤트를 직접 코드로 만들어 보겠습니다. 다음 내용을 입력한 후 실행해 보세요.
이벤트 작성: EventDemo.cs
using System; public class ButtonClass { //① 이벤트 생성을 위한 대리자 하나 생성 public delegate void EventHandler(); //메서드를 여러 개 등록 후 호출 가능 //② 이벤트 선언: Click 이벤트 public event EventHandler Click; //③ 이벤트 발생 메서드: OnClick 이벤트 처리기(핸들러) 생성 public void OnClick() { if (Click != null) //이벤트에 등록된 값이 있는지 확인(생략 가능) { Click(); //대리자 형식의 이벤트 수행 } } } class EventDemo { static void Main() { //ⓐ Button 클래스의 인스턴스 생성 ButtonClass btn = new ButtonClass(); //ⓑ btn 개체의 Click 이벤트에 실행할 메서드들 등록 btn.Click += Hi1; //btn.Click += new ButtonClass.EventHandler(Hi1); btn.Click += Hi2; //btn.Click += new ButtonClass.EventHandler(Hi2); //ⓒ 이벤트 처리기(발생 메서드)를 사용한 이벤트 발생: 다중 메서드 호출 btn.OnClick(); } static void Hi1() => Console.WriteLine("C#"); static void Hi2() => Console.WriteLine(".NET"); }