2016. 10. 19. 07:07

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


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


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


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 해비