C# 대리자(Delegate)

Posted by 알 수 없는 사용자
2015. 4. 8. 14:59 프로그래밍/C#

Delegate의 사전적의미는 대리인이란 의미를 갖는다.

C#에서의 Delegate는 메소드를 대신해서 호출하는 역할을 한다.

예를 들어 Thread를 사용한다고 할 때  thread생성시 실행되는 함수를 다음과 같이 표현할 수 있다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class MainClass
{
    public static void Main (string[] args)
    {
        Thread thread = new Thread(ThreadPrint);
 
        thread.Start ();
        thread.Join ();
    }
 
    public static void ThreadPrint()
    {
        Console.WriteLine ("Thread Call ThreadPrint Method");
    }
}


만약 delegate를 사용하면 ThreadPrint 메소드를 정의 하지 않고 다음과 같이 필요한 함수를 구현할 수 있다.


1
2
3
4
5
6
7
8
9
10
public static void Main (string[] args)
{
    Thread thread = new Thread(delegate()
    {
        Console.WriteLine ("Thread Call ThreadPrint Method");
    });
 
    thread.Start ();
    thread.Join ();
}


위의 코드에서 보면 ThreadPrint메소드정의를 생략하고 직접 delegate를 사용하여 함수를 구현하였다.

위의 코드에서는 delegate를 한번만 사용 하였다면 다음과 같이 delegate를 재 사용하도록 하는 것도 가능하다.


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
public class MainClass
{
    delegate double Calculate(int fVal, int lVal, string method);
 
    public static void Main (string[] args)
    {
        Calculate cal = delegate(int fVal, int lVal, string method) {
            double returnVal = 0.0;
 
            if ("Plus".Equals (method))
            {
                returnVal = fVal + lVal;
            }
            else if ("Minus".Equals (method))
            {
                returnVal = fVal - lVal;
            }
 
            return returnVal;
        };
 
        Console.WriteLine(cal(5, 4, "Plus"));
        Console.WriteLine(cal(5, 4, "Minus"));
    }
}








출처 : 

시작하세요! C# 프로그래밍

'프로그래밍 > C#' 카테고리의 다른 글

C# Linq  (3) 2015.05.18
C# 람다식(Lamda Expression)  (9) 2015.04.11
C# 가비지 컬렉션(Garbage Collection)  (1274) 2015.03.23
C# 기본자료형, 변수  (10) 2015.03.22