Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# Func 제네릭 타입 완벽 정리 – 익명 메서드를 저장하는 매개변수화 타입

C#에서 Func 제네릭 타입은 익명 메서드(anonymous method)나 람다 식을 저장할 수 있는 매개변수화 타입입니다. Func 델리게이트는 하나 이상의 입력 매개변수를 받아 마지막 제네릭 매개변수에 지정된 형식의 값을 반환하며, 최대 16개의 입력 매개변수까지 지원합니다.

아래 예제에서는 총 4개의 Func 타입 인스턴스를 선언하고 있습니다.

1. int를 받아 string을 반환하는 Func

Func<int, string> one = (p) => string.Format("{0}", p);

2. bool과 long을 받아 string을 반환하는 Func

Func<bool, long, string> two = (q, p) => string.Format("{0} and {1}", q, p);

3. bool과 int를 받아 string을 반환하는 Func

Func<bool, int, string> three = (q, p) => string.Format("{0} and {1}", q, p);

4. decimal을 받아 string을 반환하는 Func

Func<decimal, string> four = (p) => string.Format("{0}", p);

이렇게 선언한 Func 인스턴스는 Invoke() 메서드를 통해 실행할 수 있습니다. 실제 동작 과정을 전체 코드로 확인해 보겠습니다.

예제 코드

using System;
using System.IO;

namespace Demo {
   class Program {
      static void Main(string[] args) {

        // 4개의 Func 타입 인스턴스
        // 첫 번째 타입: int를 받아 string 반환
        Func<int, string> one = (p) =>
        string.Format("{0}", p);

        // 두 번째 타입: bool과 long을 받아 string 반환
        Func<bool, long, string> two = (q, p) =>
        string.Format("{0} and {1}", q, p);

        // 세 번째 타입: bool과 int를 받아 string 반환
        Func<bool, int, string> three = (q, p) =>
        string.Format("{0} and {1}", q, p);

        // 네 번째 타입: decimal을 받아 string 반환
        Func<decimal, string> four = (p) =>
        string.Format("{0}", p);

        Console.WriteLine(one.Invoke(25));
        Console.WriteLine(two.Invoke(false, 76756566));
        Console.WriteLine(three.Invoke(true, 50));
        Console.WriteLine(four.Invoke(1.2m));
      }
   }
}

실행 결과

25
False and 76756566
True and 50
1.2

핵심 포인트 정리

  • Func 델리게이트의 마지막 타입 매개변수가 항상 반환 타입입니다. 예를 들어 Func<bool, int, string>은 bool과 int 두 개의 입력을 받아 string을 반환합니다.
  • 람다 식 대신 기존 메서드 이름을 할당하거나, Invoke() 없이 변수를 메서드처럼 직접 호출할 수도 있습니다.
  • 반환값이 없는 경우에는 Action 델리게이트를 사용하는 것이 적합합니다.