델리게이트를 캡슐화 해서 명시적으로 델리게이트를 선언하지 않고도 이 제네릭을 이용하면 간편하게 사용이 가능하다.
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)); } }
'프로그래밍 > C#' 카테고리의 다른 글
[C#] 파일 처리 (폴더 생성 , 파일 생성 및 로드 ) (0) | 2017.02.21 |
---|---|
[C#]익명메서드와 람다식 (0) | 2015.05.06 |
[C#] 델리게이트 ( delegate , 대리자 ) (0) | 2015.04.22 |
[C#] Dispose VS Finalize (0) | 2015.04.14 |
[C#] Virtual(가상) vs Abstract(추상) vs Interface(인터페이스) (3) | 2015.04.02 |