본문 바로가기

Microsoft/C# & ASP.NET

C# Func 와 Action

보통 C# 람다에서 많이 사용하는 것으로써... 잘 잊어 먹기에 이래 적어 논다.ㅠ _ ㅠ

Func<?>

  • 제네릭을 적용한 위임자(델리게이트)
  • 미리 제공되는(선언되어있는) 델리게이트
  • 익명메서드, 람다식, 함수참조를 담을 수 있다


형식 :

Func<out TResult>

Func<in T1, out TResult>

Func<in T1,in T2, out TResult>

Func<in T1,in T2,...in T16, out TResult>


//요구사항] 정수값을 받아서 제곱값을 구하시오
//방법1. 델리게이트 생성 -> 메서드호출
//이름없는 메서드를 호출하기 위해서 델리게이트라는
//위임자를 통해서 접근했었다
// => 델리게이트를 선언해야되는 불편함이 있음
Mydelete md1 = n => n * n;
Console.WriteLine(md1(10));
//방법2. Func<> 사용 -> 델리게이트 선언x

//Func 델리게이트<제네릭>
//Func<매개변수1 자료형, 매개변수n 자료형.., 반환값 자료형>
Func func1 = n => n * n;
Console.WriteLine(func1(5)); //사용


Action<?>

  • Func과 동일하지만 반환값이 없다
형식 :

Action

Action <in T1>

Action <in T1,in T2>

Action <in T1,in T2,...in T16>


//Action사용
//델리게이트 선언x
//인자값만 받을 수 있음 반환값 없음
Action action = name => Console.WriteLine(name);

//전달할 매개변수가 없다면 <>는 빠진다
//람다식에서도 매개변수가 없다면 아래와 같이 빈괄호 처리를 해줘야한다
Action action2 = () => { Console.WriteLine("매개변수 없음!!"); };
action("하하하");
action2();