Func(T1, T2, TResult) 대리자
TOC
콘텐츠의 테이블 축소
콘텐츠의 테이블 확장

Func<T1, T2, TResult> 대리자

업데이트: 2007년 11월

매개 변수가 두 개이고 TResult 매개 변수에 지정된 형식의 값을 반환하는 메서드를 캡슐화합니다.

네임스페이스:  System
어셈블리:  System.Core(System.Core.dll)

public delegate TResult Func<T1, T2, TResult>(
	T1 arg1,
	T2 arg2
)

J#에서는 제네릭 API를 사용할 수 있지만 새로 선언할 수는 없습니다.
JScript에서는 제네릭 형식이나 메서드를 지원하지 않습니다.

Type 매개 변수

T1

이 대리자로 캡슐화되는 메서드의 첫 번째 매개 변수 형식입니다.

T2

이 대리자로 캡슐화되는 메서드의 두 번째 매개 변수 형식입니다.

TResult

이 대리자로 캡슐화되는 메서드의 반환 값 형식입니다.

매개 변수

arg1
형식: T1
이 대리자로 캡슐화되는 메서드의 첫 번째 매개 변수입니다.
arg2
형식: T2
이 대리자로 캡슐화되는 메서드의 두 번째 매개 변수입니다.

반환 값

형식: TResult
이 대리자로 캡슐화되는 메서드의 반환 값입니다.

이 대리자를 사용하면 사용자 지정 대리자를 명시적으로 선언하지 않고 매개 변수로 전달할 수 있는 메서드를 나타낼 수 있습니다. 메서드는 이 대리자에 의해 정의되는 메서드 시그니처와 일치해야 합니다. 즉, 캡슐화된 메서드에는 값으로 전달되는 매개 변수 두 개가 있어야 하고 값을 반환해야 합니다.

Bb534647.alert_note(ko-kr,VS.90).gif참고:

매개 변수가 두 개이고 void(Visual Basic의 경우 Function이 아니라 Sub로 선언됨)를 반환하는 메서드를 참조하려면 제네릭 Action<T1, T2> 대리자를 대신 사용합니다.

Func<T1, T2, TResult> 대리자를 사용하는 경우에는 매개 변수가 두 개인 메서드를 캡슐화하는 대리자를 명시적으로 정의할 필요가 없습니다. 예를 들어 다음 코드에서는 ExtractMethod라는 대리자를 명시적으로 선언하고 ExtractWords 메서드에 대한 참조를 해당 대리자 인스턴스에 할당합니다.

using System;

delegate string[] ExtractMethod(string stringToManipulate, int maximum);

public class DelegateExample
{
   public static void Main()
   {
      // Instantiate delegate to reference ExtractWords method
      ExtractMethod extractMeth = ExtractWords;
      string title = "The Scarlet Letter";
      // Use delegate instance to call ExtractWords method and display result
      foreach (string word in extractMeth(title, 5))
         Console.WriteLine(word);
   }

   private static string[] ExtractWords(string phrase, int limit)
   {
      char[] delimiters = new char[] {' '};
      if (limit > 0)
         return phrase.Split(delimiters, limit);
      else
         return phrase.Split(delimiters);
   }
}


다음 예제에서는 새 대리자를 명시적으로 정의하고 명명된 메서드를 할당하는 대신 Func<T1, T2, TResult> 대리자를 인스턴스화하여 이 코드를 간소화합니다.

using System;

public class GenericFunc
{
   public static void Main()
   {
      // Instantiate delegate to reference ExtractWords method
      Func<string, int, string[]> extractMethod = ExtractWords;
      string title = "The Scarlet Letter";
      // Use delegate instance to call ExtractWords method and display result
      foreach (string word in extractMethod(title, 5))
         Console.WriteLine(word);
   }

   private static string[] ExtractWords(string phrase, int limit)
   {
      char[] delimiters = new char[] {' '};
      if (limit > 0)
         return phrase.Split(delimiters, limit);
      else
         return phrase.Split(delimiters);
   }
}


C#에서는 다음 예제와 같이 Func<T1, T2, TResult> 대리자를 무명 메서드와 함께 사용할 수 있습니다. 무명 메서드에 대한 소개는 무명 메서드(C# 프로그래밍 가이드)를 참조하십시오.

using System;

public class Anonymous
{
   public static void Main()
   {
      Func<string, int, string[]> extractMeth = delegate(string s, int i)
         { char[] delimiters = new char[] {' '}; 
           return i > 0 ? s.Split(delimiters, i) : s.Split(delimiters);
         };

      string title = "The Scarlet Letter";
      // Use Func instance to call ExtractWords method and display result
      foreach (string word in extractMeth(title, 5))
         Console.WriteLine(word);
   }
}


다음 예제와 같이 Func<T1, T2, TResult> 대리자에 람다 식을 할당할 수도 있습니다. 람다 식에 대한 소개는 람다 식람다 식(C# 프로그래밍 가이드)을 참조하십시오.

using System;

public class LambdaExpression
{
   public static void Main()
   {
      char[] separators = new char[] {' '};
      Func<string, int, string[]> extract = (s, i) => 
           i > 0 ? s.Split(separators, i) : s.Split(separators) ;

      string title = "The Scarlet Letter";
      // Use Func instance to call ExtractWords method and display result
      foreach (string word in extract(title, 5))
         Console.WriteLine(word);
   }
}


람다 식의 내부 형식은 제네릭 Func 대리자 중 하나입니다. 이를 통해 람다 식을 대리자에 명시적으로 할당하지 않고 매개 변수로 전달할 수 있습니다. 특히 System.Linq 네임스페이스에 있는 형식의 메서드 중 다수에는 Func<T1, T2, TResult> 매개 변수가 있으므로 Func<T1, T2, TResult> 대리자를 명시적으로 인스턴스화하지 않고도 이러한 메서드에 람다 식을 전달할 수 있습니다.

다음 예제에서는 Func<T1, T2, TResult> 대리자를 선언하고 사용하는 방법을 보여 줍니다. 이 예제에서는 Func<T1, T2, TResult> 변수를 선언하고 String 값과 Int32 값을 매개 변수로 사용하는 람다 식을 할당합니다. String 매개 변수의 길이가 Int32 매개 변수의 값과 같으면 이 람다 식은 true를 반환합니다. 이 메서드를 캡슐화하는 대리자는 이후에 문자열 배열의 문자열을 필터링하는 쿼리에 사용됩니다.

using System;
using System.Collections.Generic;
using System.Linq;

public class Func3Example
{
   public static void Main()
   {
      Func<String, int, bool> predicate = (str, index) => str.Length == index;

      String[] words = { "orange", "apple", "Article", "elephant", "star", "and" };
      IEnumerable<String> aWords = words.Where(predicate).Select(str => str);

      foreach (String word in aWords)
         Console.WriteLine(word);
   }
}


Windows Vista, Windows XP SP2, Windows Server 2003, Windows CE, Windows Mobile for Smartphone, Windows Mobile for Pocket PC

.NET Framework 및 .NET Compact Framework에서 모든 플랫폼의 전체 버전을 지원하지는 않습니다. 지원되는 버전의 목록을 보려면 .NET Framework 시스템 요구 사항을 참조하십시오.

.NET Framework

3.5에서 지원

.NET Compact Framework

3.5에서 지원

커뮤니티 추가 항목

추가
표시:
© 2016 Microsoft