티스토리 뷰
델리게이트
C#에서 이 델리게이트는 콜백을 구현하기 위해 사용이 된다.
델리게이트는 메소드에 대한 참조이다. 델리게이트에 메소드의 주소를 할당한 후
델리게이트를 호출하면 이 델리게이트가 메소드를 호출해준다.
한정자 delegate 반환형식 델리게이트명(매개변수);
델리게이트는 delegate 키워드를 제외하고는 메소드와 매우 유사하다.
메소드의 참조이기 때문에 자신이 참조할 메소드의 반환 형식과 매개 변수를 명시해줘야 한다.
한가지 알아둬야 할 것은 델리게이트는 인스턴스가 아닌 형식(Type)이라는 것이다. int, string과 같은 형식이다.
따라서 메소드를 참조하기 위해서는 인스턴스를 따로 만들어야 한다.
delegate double TestDelegate(double num1, double num2);
double Plus(double num1, double num2)
{
return num1 + num2;
}
double Minus(double num1, double num2)
{
return num1 - num2;
}
TestDelegate test;
test = new TestDelgate(Plus);
Console.WriteLine(test(10.2, 30.1));
test를 선언할 때 Plus() 메소드를 매개 변수로 넘겨주면 Plus() 메소드를 콜백하고
Minus를 넘겨주면 Minus() 메소드를 콜백해준다.
델리게이트 체인
델리게이트 하나가 여러 개의 메소드를 동시에 참조하는 것이다.
delegate void Order(string menu);
void CallServer(string menu)
{
Console.WriteLine("{0} 하나 주세요", menu);
}
void TellMenuForChef(string menu)
{
Console.WriteLine("{0} 하나요", menu);
}
void GiveMenu(string menu)
{
Console.WriteLine("{0} 나왔습니다", menu);
}
이렇게 선언한 메소드들은 Order 델리게이트의 인스턴스가
자신들을 동시에 참조하도록 다음처럼 += 연산자를 이용해 결합시킬 수 있다.
Order please = new Order( CallServer);
please += new Order(TellMenuForChef);
please += new Order(GiveMenu);
please("햄버거");
//
햄버거 하나 주세요
햄버거 하나요
햄버거 나왔습니다.
이렇게 델리게이트를 한번만 호출하면 자신이 참조하고 있는 메소드 모두를 호출하게 된다.
여러 개의 콜백을 동시에 호출해야 할 때 유용하다.
이 외의 방법도 있는데 이 방법이 제일 사용하기 편해서 이 방법만 작성해 놓으려고 한다.
특정 델리게이트를 끊어내야 할 때는 -= 연산자를 이용하면 된다.
이벤트
이벤트는 델리게이트에 event 키워드로 수식한 것이다.
델리게이트와의 차이점으로는 이벤트는 public으로 선언되어 있어도 자신이 선언되어 있는 클래스 외부에서는
호출이 불가능 하다는 것이다.
delegate void EventHandler(string msg);
class Notifi
{
public event EventHandler Something;
}
class MainApp
{
static void Main(string[] args)
{
Notifi noti = new Notifi();
noti.Something("Hello"); // Error!
}
}
- Total
- Today
- Yesterday
- TAG
- 글로
- 차이점
- inline
- 생활코딩
- 알고리즘
- 안드로이드 스튜디오
- PHP&MySQL
- 선택자
- 객체
- 조건문
- 언리얼엔진4
- HTML
- css
- 생활코딩#동영상을#글로#html
- 변수
- Link
- 네트워크 프로그래밍
- 관계형데이터베이스
- C언어
- 기초
- 생활코딩#MySQL
- 동영상을
- 언리얼엔진
- 정렬
- GRID
- visual studio code
- 문자열
- php
- javascript
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |