앞서 간략 하게 델리게이트가 무엇이며 선언 방법과 사용은 어떻게 하는지 알아 보았습니다.
하지만 사용 방법에 있어 왜 굳이 델리게이트를 사용하지 그냥 함수를 호출 하면 되지 않을까?
그게 더 효율적이지 싶은데... 라는 의문도 생기실 수 있으실 겁니다.
이번 시간에는 좀 더 그런 의문을 없애기 위해 델리게이트가 어떻게 사용 되는지를 알아보
겠습니다.
* 델리게이트 콜백
- 내 함수를 줄테니 다시 되돌려줘 !!! 꼬옥 !!!
그림에서 보는 거와 같이 버튼을 클릭하여 클래스 이벤트를 발생 시키는 예제를 만들어 보았습니다.
이렇게 이미지로만 본다면 그냥 버튼 두개에 메시지 박스 뜨네 라고 생각 하실 수도 있겠습니다.
Form1 메인 소스
위 소스와 같이 버튼을 클릭 했는데 Form 에 있는 Start 함수 End 함수를 직접 실행 하지 않았습니다.
다만 Form 을 시작 할때 클래스를 초기화 하고 클래스 안에 선언되어있는 델리게이트에
Form 에 선언한 Start(), End() 두 함수를 던져 주었을 뿐...
그리고 나서 클래스 이벤트에 그 델리게이트가 연결 되어 있습니다.
위 그림에서 보시는 거와 같이 클래스 에 델리게이트가 선언이 되어 있으며, 이벤트도 발생 하게 되어 있습니다.
Form 시작하기에 앞서 클래스 초기화를 했고 클래스에 선언된 델리게이트에 Form 내부 함수를 던져 주었으며,
그 델리게이트를 클래스 이벤트에 등록 하였습니다. 사용자가 버튼을 클릭 시 클래스 함수 Start() 와 End() 함수
를 실행 하게 되는데 각각 이벤트를 발생 시키는 코드를 가지고 있습니다.
이벤트가 발생이 되면 다시 Form에 있는 Start() End() 함수가 실행 되어 메시지 박스 그림을 보게 됩니다.
이와 같이 Form 함수를 넘겨주어 다시 되돌려 받는 델리게이트 콜백 및 사용 방법 이였습니다.
* 델리게이트 체인 : 하나의 델리게이트에 여러 개의 함수를 연결 시키는 것
[예제]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
delegate void OneDelegate(int a, int b);
class Program
{
public static void Plus(int a, int b)
{
Console.WriteLine("{0} + {1} = {2}", a, b, a + b);
}
public static void Minus(int a, int b)
{
Console.WriteLine("{0} - {1} = {2}", a, b, a - b);
}
public static void Multiplication(int a, int b)
{
Console.WriteLine("{0} * {1} = {2}", a, b, a * b);
}
public static void Division(int a, int b)
{
Console.WriteLine("{0} / {1} = {2}", a, b, a / b);
}
static void Main(string[] args)
{
//델리게이트 초기화
OneDelegate m = new OneDelegate(Plus);
//델리게이트에 함수들 추가
m += Minus;
m += Multiplication;
m += Division;
m(3,4); //등록된 함수들 실행
//델리게이트에 등록된 함수 빼기
m -= Multiplication;
m -= Division;
System.Console.WriteLine("=======================================");
m(3,4);
System.Console.WriteLine("Press the Enter key to continue.");
System.Console.ReadLine();
}
}
}
[C#] 델리 게이트 (Delegate) - 1 델리게이트란? , 선언 방법과 간단한 예제
'C# Programming' 카테고리의 다른 글
[C#] 크로스 스레드 (Cross Thread) 예제 (0) | 2019.09.15 |
---|---|
[C#] 인덱서 (Indexer) (0) | 2019.09.14 |
[C#] 델리 게이트 (Delegate) - 1 델리게이트란? , 선언 방법과 간단한 예제 (0) | 2019.09.11 |
[C#] 프로젝트(Project) 내 폼(Form) 목록 리스트(List) 읽기 및 폼(Form) 찾기 (0) | 2019.09.10 |
[C#] Task Class 비동기 스레드 및 병렬 (MSDN) (0) | 2019.09.08 |