23년 6월 30일->23년 7월 8일 수정
대리자부터 시작해서 이벤트, 객체에 이벤트를 연결하는 법까지 정리.
먼저 대리자
대리자는 메소드에 대한 참조이다. 대리자에 메소드의 주소값을 저장하고 호출자가 대리자를 호출하면 메소드가 실행된다.
이벤트도 대리자와 동작원리가 같다. 차이라고하면 대리자 인스턴스 선언을 event 한정자로 수식해야하고 대리자 인스턴스가 클래스 내에서 선언돼야 한다.
윈폼의 폼 객체에 이벤트 핸들러를 등록하기이다 아래의 코드를 보자
-----------------------코드-----------------------------------------
form.MouseDown += new MouseEventHandler(form_MouseDown);
static void form_MouseDown(object sender, MouseEventArgs e)
{
//내가 처리하고 싶은 내용
}
------------------------코드---------------------------------------
form이라는 객체에는 MouseDown이라는 대리자 인스턴스가 있음.
form_MouseDown이라는 메서드(이벤트 핸들러)를 만든다. (MouseDown)이라는 대리자와 형식이 같아야함.
MouseDown에 이 메서드(이벤트 핸들러)를 MouseDown 대리자에 등록함.
public delegate void MouseEventHandler(object sender, MouseEventArgs e);
각각의 매개변수 sender와 e에 대한 정보는 다음과 같다.
sender는 이벤트가 발생한 객체. 위의 코드는 Form에서 발생한 이벤트이므로 sender는 Form 객체이다.
e는 마우스 이벤트의 상세정보(ex : e.clicks = 마우스 클릭 횟수)