Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 오늘의 추천어플
- 독개물항
- 제주가죽부츠세탁
- 맑은세탁빨래방
- 모바일게임
- 제주 흑돼지 맛집
- 제주 한성식당
- 컴투스
- 예수그리스도
- 맑은슈즈워시
- 추천어플
- 황금고팡
- 만복흑돼지
- 해적잠수함
- WebView
- 낚시
- 돈사촌 노형점
- 유리의성
- 아이폰
- [JunK의 모바일게임 소개]
- 우도물꼬해녀의집
- 제주흑돈세상수라간
- 추천게임
- 대형카페트세탁
- 보리빵마을
- 명품화세탁
- 제주 산방산 맛집
- 돈향기
- 명품가방세탁
- 산지물식당 신제주 연동점
Archives
- Today
- Total
일상+
Delegate 간단한 예제 본문
델리게이트는 우리말로 '위임' 또는 '대리자'로 번역된다.
위임이란 어떤일을 자기가 처리하지 않고 남에게 떠넘긴다는 뜻이다.
델리게이트는 C/C++에서 사용하는 함수 포인터와 동일한 개념으로, 주로 이벤트와 관련된 처리에 사용된다. C#에서 델리게이트는 메서드의 포인터(메서드 이름)를 지정할 뿐 내부에 코드를 기술하지는 않는다.
델리게이트는 delegate 키워드를 사용해 선언한다.
간단한 예제 코드를 살펴 보도록 하자.
주황색부분이 Arithmetic 클래스의 메서드를 호출할 델리게이트를 정의한 것이다.
그리고 Aruthmetic 클래스의 인스턴스를 생성한다.
다음으로 Add()메서드를 호출하기 위해서 ArithmeticDelegate 델리게이트를 사용한다.
시그너처가 동일한 다른 메서드를 호출하고 싶다면 new 연산자를 이용해 해당 메서드를 새로 지정해야 된다.
하지만 동일한 클래스인스턴스를 갖는 객체에서 메서드 시그너처가 다른 메서드를 각각 호출하려면, 호출할 메서드와 시그너처가 일치하는 델리게이트를 사용해야 한다.
위임이란 어떤일을 자기가 처리하지 않고 남에게 떠넘긴다는 뜻이다.
델리게이트는 C/C++에서 사용하는 함수 포인터와 동일한 개념으로, 주로 이벤트와 관련된 처리에 사용된다. C#에서 델리게이트는 메서드의 포인터(메서드 이름)를 지정할 뿐 내부에 코드를 기술하지는 않는다.
델리게이트는 delegate 키워드를 사용해 선언한다.
간단한 예제 코드를 살펴 보도록 하자.
namespace Delegate_test
{
class Arithmetic
{
public int Add(int a, int b) { return a + b; }
public int Sub(int a, int b) { return a - b; }
public int Mul(int a, int b) { return a * b; }
public int Div(int a, int b)
{
if ((a == 0) || (b == 0)) return 0;
return a / b;
}
public void PrintInfo(string str)
{
System.Console.WriteLine("Arithmetic::PrintInfo = {0}", str);
}
}
public delegate int ArithmeticDelegate(int a, int b); // 델리게이트 정의
public delegate void PrintInfoDelegate(string str);
class Program
{
static void Main(string[] args)
{
Arithmetic obj = new Arithmetic(); // 인스턴스 생성
ArithmeticDelegate ex1 = new ArithmeticDelegate(obj.Add); // 메서드호출
System.Console.WriteLine("Add: ex(20, 10) = {0}", ex1(20, 10));
ex1 = new ArithmeticDelegate(obj.Sub); // Sub메서드 호출
System.Console.WriteLine("Sub: ex(20, 10) = {0}", ex1(20, 10));
ex1 = new ArithmeticDelegate(obj.Mul); // Mul메서드 호출
System.Console.WriteLine("Mul: ex(20, 10) = {0}", ex1(20, 10));
ex1 = new ArithmeticDelegate(obj.Div); // Div메서드 호출
System.Console.WriteLine("Div: ex(20, 10) = {0}", ex1(20, 10));
PrintInfoDelegate ex2 = new PrintInfoDelegate(obj.PrintInfo);
ex2("델리게이트 예제");
}
}
}
{
class Arithmetic
{
public int Add(int a, int b) { return a + b; }
public int Sub(int a, int b) { return a - b; }
public int Mul(int a, int b) { return a * b; }
public int Div(int a, int b)
{
if ((a == 0) || (b == 0)) return 0;
return a / b;
}
public void PrintInfo(string str)
{
System.Console.WriteLine("Arithmetic::PrintInfo = {0}", str);
}
}
public delegate int ArithmeticDelegate(int a, int b); // 델리게이트 정의
public delegate void PrintInfoDelegate(string str);
class Program
{
static void Main(string[] args)
{
Arithmetic obj = new Arithmetic(); // 인스턴스 생성
ArithmeticDelegate ex1 = new ArithmeticDelegate(obj.Add); // 메서드호출
System.Console.WriteLine("Add: ex(20, 10) = {0}", ex1(20, 10));
ex1 = new ArithmeticDelegate(obj.Sub); // Sub메서드 호출
System.Console.WriteLine("Sub: ex(20, 10) = {0}", ex1(20, 10));
ex1 = new ArithmeticDelegate(obj.Mul); // Mul메서드 호출
System.Console.WriteLine("Mul: ex(20, 10) = {0}", ex1(20, 10));
ex1 = new ArithmeticDelegate(obj.Div); // Div메서드 호출
System.Console.WriteLine("Div: ex(20, 10) = {0}", ex1(20, 10));
PrintInfoDelegate ex2 = new PrintInfoDelegate(obj.PrintInfo);
ex2("델리게이트 예제");
}
}
}
주황색부분이 Arithmetic 클래스의 메서드를 호출할 델리게이트를 정의한 것이다.
그리고 Aruthmetic 클래스의 인스턴스를 생성한다.
다음으로 Add()메서드를 호출하기 위해서 ArithmeticDelegate 델리게이트를 사용한다.
시그너처가 동일한 다른 메서드를 호출하고 싶다면 new 연산자를 이용해 해당 메서드를 새로 지정해야 된다.
하지만 동일한 클래스인스턴스를 갖는 객체에서 메서드 시그너처가 다른 메서드를 각각 호출하려면, 호출할 메서드와 시그너처가 일치하는 델리게이트를 사용해야 한다.
이 코드의 결과는 다음과 같다.
Add: ex(20, 10) = 30
Sub: ex(20, 10) = 10
Mul: ex(20, 10) = 200
Div: ex(20, 10) = 2
Arithmetic::PrintInfo = 델리게이트 예제
Add: ex(20, 10) = 30
Sub: ex(20, 10) = 10
Mul: ex(20, 10) = 200
Div: ex(20, 10) = 2
Arithmetic::PrintInfo = 델리게이트 예제
Comments