※대리자(Delegate)
대리자란?
메소드를 대신해서 호출
코드 -> 대리자호출 -> 메소드호출
-> 메소드호출
-> 메소드호출
델리게이트의 선언
선언위치 : 네임스페이스,클래스
선언방법 : 메소드와 비슷
[접근지정자] delegate [반환형] [대리자명]([매개변수리스트]);
//반환형/매개변수리스트 <- 대리자가 호출할 수 있는 메소드의 모양?형식?
델리게이트가 호출할 수 있는 메소드
반환형과 메개변수리스트가 일치하는 메소드
ex1. delegate void del1();
-> void [메소드명](){....};
ex2. delegate string del2(string arg);
-> string [메소드명](string arg){....};
델리게이트의 메소드 등록
[델리게이트명] 변수 = [메소드명];
ex. delegate void Del1();
-> void Method1(){....};
-> De1 del = Method1; //del이 Method1호출할 수 있다.
-> del += Method2; //del은 Method1~2를 호출할 수 있다.
델리게이트에 등록된 메소드 제거
del -= Method2; //제거
※이벤트(Event)
개념 : 사건의 발생
이벤트와 관련된 개체
이벤트 발생자 // 교실
↓
이벤트 수신자 // 소방서
↓
이벤트 처리자 // 소방차
C#에서 이벤트와 관련된 개체
이벤트 발생자 : 이벤트 델리게이트(대리자)를 실행하는 실행하는 개체
이벤트 수신자 : 이벤트 발생자가 실행하는 메소드를 가지고 있는 개체
이벤트 처리자 : 이벤트 수신자의 실행 메소드(이벤트 핸들러)
Ex
버튼 // 이벤트 발생자 : 이벤트 델리게이트 실행
↓
폼 // 이벤트 수신자 : 이벤트 델리게이트가 실행할 메소드를 가지고 있다.
↓
폼의 메소드 // 이벤트 처리자
이벤트 발생개체 코딩방법
이벤트를 선언
[접근제한자] event [델리게이트명] [이벤트명];
(델리게이트형의 필드를 정의하는 것)
이벤트 발생방법
->델리게이트의 실행방법과 동일
이벤트명(매개변수리스트);
ex. attackedEvent(매개변수리스트);
이벤트의 델리게이트형
[접근지정자] delegate void [대리자명](object sender, EventArgs args); //관례적
이벤트발생자 , 이벤트에 대한 정보 또는 자식개체(상속)
이벤트 수신자 코팅방법
이벤트 발생개체로부터 발생된 이벤트를 처리할 메소드를 등록 -> 델리게이트의 메소드 등록
이벤트명 = 메소드명1;
이벤트명 += 메소드명2;
이벤트 처리자 코딩방법
void [메소드명] (object obj, EventArgs args){....}
대리자란?
메소드를 대신해서 호출
코드 -> 대리자호출 -> 메소드호출
-> 메소드호출
-> 메소드호출
델리게이트의 선언
선언위치 : 네임스페이스,클래스
선언방법 : 메소드와 비슷
[접근지정자] delegate [반환형] [대리자명]([매개변수리스트]);
//반환형/매개변수리스트 <- 대리자가 호출할 수 있는 메소드의 모양?형식?
델리게이트가 호출할 수 있는 메소드
반환형과 메개변수리스트가 일치하는 메소드
ex1. delegate void del1();
-> void [메소드명](){....};
ex2. delegate string del2(string arg);
-> string [메소드명](string arg){....};
델리게이트의 메소드 등록
[델리게이트명] 변수 = [메소드명];
ex. delegate void Del1();
-> void Method1(){....};
-> De1 del = Method1; //del이 Method1호출할 수 있다.
-> del += Method2; //del은 Method1~2를 호출할 수 있다.
델리게이트에 등록된 메소드 제거
del -= Method2; //제거
※이벤트(Event)
개념 : 사건의 발생
이벤트와 관련된 개체
이벤트 발생자 // 교실
↓
이벤트 수신자 // 소방서
↓
이벤트 처리자 // 소방차
C#에서 이벤트와 관련된 개체
이벤트 발생자 : 이벤트 델리게이트(대리자)를 실행하는 실행하는 개체
이벤트 수신자 : 이벤트 발생자가 실행하는 메소드를 가지고 있는 개체
이벤트 처리자 : 이벤트 수신자의 실행 메소드(이벤트 핸들러)
Ex
버튼 // 이벤트 발생자 : 이벤트 델리게이트 실행
↓
폼 // 이벤트 수신자 : 이벤트 델리게이트가 실행할 메소드를 가지고 있다.
↓
폼의 메소드 // 이벤트 처리자
이벤트 발생개체 코딩방법
이벤트를 선언
[접근제한자] event [델리게이트명] [이벤트명];
(델리게이트형의 필드를 정의하는 것)
이벤트 발생방법
->델리게이트의 실행방법과 동일
이벤트명(매개변수리스트);
ex. attackedEvent(매개변수리스트);
이벤트의 델리게이트형
[접근지정자] delegate void [대리자명](object sender, EventArgs args); //관례적
이벤트발생자 , 이벤트에 대한 정보 또는 자식개체(상속)
이벤트 수신자 코팅방법
이벤트 발생개체로부터 발생된 이벤트를 처리할 메소드를 등록 -> 델리게이트의 메소드 등록
이벤트명 = 메소드명1;
이벤트명 += 메소드명2;
이벤트 처리자 코딩방법
void [메소드명] (object obj, EventArgs args){....}