2016. 10. 19. 07:07

.Net 3.5 이상부터 지원되는 Func<T, T Result> 를 사용하면 함수를 인자로 넘길 수 있습니다.


무슨 말인고 하니 함수를 콜 하였는데 그 함수 내부에서 다른 쪽의 함수를 실행해야 하는 경우가 있습니다.


이해를 돕기 위해 예문을 추가합니다.


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
31
32
33
34
35
36
37
38
using System;
 
namespace test1019
{
    class Program
    {
        static void Main(string[] args)
        {
            ClassA ca = new ClassA();
 
            ca.AA(BB); // 함수 BB 를 AA의 인자로 넘깁니다
 
            Console.WriteLine("Press any key to continue.");
            Console.ReadKey();
        }
 
        public static bool BB()
        {
            // do something...
            Console.WriteLine("BB");
 
            return true; // T Result 때문에 임의의 리턴값을 설정. 특별한 의미는 없다.
        }
 
        class ClassA
        {
            public void AA(Func<bool> func)
            {
                // do something
                Console.WriteLine("AA");
 
                func(); // AA 수행 중 클래스 바깥에 있는 BB()를 실행
            }
        }
 
    }
 
}

리턴타입이 void 형인 함수는 넘길수 없다는 것에 유의해 주세요.

Func<T, T Result> 가 인자 T는 생략이 가능하지만 T Result 인자는 생략이 안됩니다.




MSDN 링크 입니다.

https://msdn.microsoft.com/ko-kr/library/bb549151(v=vs.110).aspx



Posted by 해비