'C# 이벤트 핸들러 개념 이해'에 해당되는 글 1건

728x90

이벤트 개념을 잡고 이벤트를 만들어서 코드 작성을 하면 훨씬 더 좋을거 같아서 C#이 자동으로 만들어주는 이벤트를 분석해보기로 했다.



button1 을 더블 클릭하면 자동으로 코드가 만들어진다.


private void button1_Click(object sender, EventArgs e)
{

}


모든 이벤트는 이벤트를 발생시킨 객체(object) 와 해당 이벤트의 정보를 가지는 이벤트 객체로 구성되는 두개의 인자를 가진다.


Designer.cs 파일에도 자동으로 만들어진 코드가 있다.

this.button1.Click += new System.EventHandler(this.button1_Click);


이걸 분석해보자.

마우스 우클릭을 눌러서 정의 피킹(Alt + F12)을 해보면 연결된 정의가 뭔지 나온다.

이걸 도식화해서 그려봤다.



결국 .NET 기본 클래스 라이브러리에 존재하는 미리 정의된 delegate 타입을 사용한 것이다.


this.btnTest.Click += new System.EventHandler(this.MyHandler);

명칭을 변경해주면

자동으로

private void MyHandler(object sender, EventArgs e)
{

}

로 변경된다.


이벤트를 직접 만들어서 사용하려면 어떻게 해야 할까?

지정자 event event-delegate event_name;

이라는 걸 알 수 있다.

이벤트(event)는 어떤 사건이 발생했을 때 호출되어야 하는 메서드의 목록이다.

이벤트는 내부적으로 delegate로 구현되므로 이벤트를 선언하기 전에 delegate를 먼저 선언해두어야 한다.

delegate는 이벤트가 어떤 인수를 전달하는지를 정의하며, 이벤트 핸들러의 형태를 규정한다.


http://link2me.tistory.com/853 게시물의 delegate 개념 이해하기 와 http://link2me.tistory.com/856 폼간 데이터 전송 게시물에 보면 delegate 를 활용한 이벤트가 나온다.


영문 대신에 이해하기 쉽게 우리말로 적어보면

의 과정으로 동작되는 걸 알 수 있다.

- 하나의 delegate 로 여러개의 event 를 생성할 수 있다.

- 실행메서드명은 delegate 에서 정의한 이벤트핸들러 명칭 대신 다른 명칭을 사용하고 시그너처(string data)는 동일하다.


타 블로그에 작성된 글을 보고 코드를 만들어서 실행은 해봤는데 명확하게 이해가 안되었었다.

좀 더 분석을 해보니 이런 흐름이라는 걸 어렴풋이 이해하게 되었고 다음부터는 이벤트 만들어서 활용하는 걸 어렵지 않게 할 수 있을 거 같다.


빠른 개념 이해는 역시 파워포인트를 활용해서 그림으로 도식화해보는 것이다.


개념 이해가 된 상태에서 http://www.csharpstudy.com/CSharp/CSharp-delegate3.aspx 게시물을 보면 좀 더 이해하는데 도움이 된다.


델리게이트와 이벤트 핸들러에 대한 이해를 완벽하게 하려면 위 그림 가지고는 부족하다.

같은 폼내에서 이벤트 핸들러 처리하는 것은 별로 어렵지 않다.

다른 폼으로 값을 전달하기 위해서는 어떻게 해야 할까?

다른 폼에서 값을 전달받기 위해서는 어떻게 해야 할까?


그 해답은 http://link2me.tistory.com/928

블로그 이미지

Link2Me

,