Delegate (델리게이트) 사용법 및 예시
1.
이벤트 핸들링을 위해서 사용, 쉽게말해서 피동적인 액션을 취할때 사용한다
누군가가 나를 호출하므로서 내가 호출당하기 위해 사건에 개입하는 일이 없게된다
즉, 사건과 그로인한 행위를 분리할 수 있다
2.
C++에서 이 이벤트핸들링을 위해서 사용하던 함수포인터라는 개념을 더더욱 쓰기좋게 만들어둔 형태
3.
C# delegate는 C/C++의 함수 포인터와 비슷한 개념으로 메서드 파라미터와 리턴 타입에 대한 정의를 한 후, 동일한 파라미터와 리턴 타입을 가진 메서드를 서로 호환해서 불러 쓸 수 있는 기능이다.
예를 들면, 아래 RunDelegate 델리게이트는 입력 파라미터가 int 하나이고 리턴 값이 없는 메서드를 가리킨다. RunThis() 메서드와 RunThat()메서드는 모두 int 파라미터 하나에 리턴 값이 없는 메서드이므로, RunDelegate의 함수 형식(prototype)과 맞으므로 이 delegate를 사용할 수 있다.
예시.
버튼을 누르면 월드내 생성되는 오브젝트 전체가 죽는다고 가정했을 때
이벤트핸들링 없이 처리하면, 버튼이 눌렸을 시점을 IF문 등으로 체크하여
모든 오브젝트를 돌며 죽는 처리를 해야함.
foreach(WorldInObject obj in ..)
obj.die();
그러나 델리게이트를 사용하면, 이것에 대한 코드를 안짜도 된다.
모든 오브젝트의 어미에 미리 void OnButtonPressed(){ this.die(); } 를 선언하고 관장하는쪽에 등록 해두기만하면 전혀 호출할 필요가 없다.
왜냐하면, 버튼이 눌렸을 경우 버튼을 관장하는 매니저에서 OnButtonPressed를 자동으로 호출할 것이기 때문이다.
출처 : http://devkorea.co.kr/bbs/board.php?bo_table=m03_qna&wr_id=36068
'C#' 카테고리의 다른 글
컴퓨터 화면 실시간 스트리밍 프로그램 만들기 #1 (1) | 2019.08.03 |
---|---|
외부 FONT 프로젝트에 적용하기 (0) | 2019.04.06 |
폴더 디렉터리 목록 불러오기 및 수정,삭제,저장 (0) | 2019.03.25 |