.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