[C#] Func<T, TResult> Delegate (델리게이트 캡슐화)

|


델리게이트를 캡슐화 해서 명시적으로 델리게이트를 선언하지 않고도 이 제네릭을 이용하면 간편하게 사용이 가능하다. 

Func<T, TResult>는 내부적으로 델리게이트를 선언해서 사용하지만 사용자에게는 노출하지 않습니다.

따라서 사용자는 델리게이트를 몰라도 사용이 가능합니다.


T는 입력 파라미터, TResult는 결과 값이다.


1. 기존의 방법


delegate string ConvertMethod(string inString);
 
public class DelegateExample
{
   public static void Main()
   {
      // Instantiate delegate to reference UppercaseString method
      ConvertMethod convertMeth = UppercaseString;
      string name = "Dakota";
      // Use delegate instance to call UppercaseString method
      Console.WriteLine(convertMeth(name));
   }
 
   private static string UppercaseString(string inputString)
   {
      return inputString.ToUpper();
   }
}


2. Func(T,TResult) 대리자 사용시


public class GenericFunc
{
   public static void Main()
   {
      // Instantiate delegate to reference UppercaseString method
      Func<string, string> convertMethod = UppercaseString;
      string name = "Dakota";
      // Use delegate instance to call UppercaseString method
      Console.WriteLine(convertMethod(name));
   }
 
   private static string UppercaseString(string inputString)
   {
      return inputString.ToUpper();
   }
}


3. 할당은 무명메서드나 람다식을 이용도 가능하다.


public class Anonymous
{
   public static void Main()
   {
      Func<string, string> convert = delegate(string s)
         { return s.ToUpper();}; 
 
      string name = "Dakota";
      Console.WriteLine(convert(name));   
   }
}
 
 
public class LambdaExpression
{
   public static void Main()
   {
      Func<string, string> convert = s => s.ToUpper();
 
      string name = "Dakota";
      Console.WriteLine(convert(name));   
   }
}


And