반응형
1. 사용 목적
- 딜리게이트 선언의 불편함을 보완
ex) delegate 사용
delegate void DelegateFunction(); // 이렇게 매번 선언을 해줘야 하는 불편함이 있음
static void Main(string[] args)
{
DelegateFunction df = () => Console.WriteLine("실행");
// 아래 두가지 방법 중 하나로 실행 가능
df(); // 실행 방법 1
df.Invoke(); // 실행 방법 2
}
ex) Action 사용
static void Main(string[] args)
{
Action ac = () => Console.WriteLine("실행");
ac();
ac.Invoke();
}
- 이처럼 간결하게 나타낼 수 있다.
2. Action<T>
- 리턴 값이 없는 딜리게이트에만 사용 가능하다.
- 매개변수는 가질 수 있다.(매개변수가 없는 형태라고 착각하지 말 것!)
ex)
static void Main(string[] args)
{
Action<int> ac = (int value) => Console.WriteLine(value);
// Action<int> ac = (int value) => value; // 안됨
}
3. Func<T>
- 리턴값이 있는 딜리게이트를 대신해 사용 가능
- T 위치에 들어가는 인자들 중 마지막 인자가 리턴값을 의미하고 나머지는 매개변수 타입을 의미한다.
ex) Func<string, int, float> => string, int는 매개변수 타입을 의미, float이 리턴값을 의미
static void Main(string[] args)
{
// 앞의 두 매개변수 n1, n2를 받아오고 n1+n2를 리턴해줌
Func<int, int, int> AddFunc = (int n1, int n2) => n1 + n2;
}
4. Predicate<T>
- 리턴값으로 항상 Boolean 형을 받는 형태
- 리턴값을 굳이 명시할 필요 없고, 매개변수 타입만 명시해주면 됨
ex)
static void Main(stirng[] args)
{
// num이 5보다 큰 지 여부를 반환
Predicate<int> CheckNum = (num) => num > 5;
}
cf) 참고자료
https://yeko90.tistory.com/entry/c-Action-Func-Predicate