internal class Program { private static void Main(string[] args) { Console.WriteLine("Hello, World!"); } } class AClass { public void Run() { // Action // 입력 : T 타입 // 리턴갑 : 없음 // 기존 메서드 지정 System.Action act = Output; act("Hello"); // 무명 메서드 지정 Action act2 = delegate (string msg, string title) { Console.WriteLine(msg, title); }; act2("No data found", "Error"); // 람다식 사용 Action act3 = code => Console.WriteLine("Code: {0}", code); act3(1033); } void Output(string s) { Console.WriteLine(s); } } class BClass { int _state; //--------------------- // 예제 1 // Func // 입력: 없음 // 리턴: TResult 타입 //--------------------- public void Run() { // 메서드 지정 System.Func f = IsValid; bool result = f(); // 무명 메서드 지정 Func fa = delegate { return _state == 0; }; result = fa(); // 람다식 이용 Func fb = () => _state == 0; result = fb(); } bool IsValid() { return _state == 0; } //--------------------- // 예제 2 // Func // 입력: 1개 // 리턴: TResult 타입 //--------------------- public void Run1() { // 메서드 지정 System.Func f = IsValidRange; bool result = f(10); // 무명 메서드 지정 Func fa = delegate (int n) { return n > 0; }; result = fa(-1); // 람다식 이용 Func fb = n => n > 0; result = fb(-2); } bool IsValidRange(int n) { return n > 0; } void Predicate() { // Predicate Predicate p = delegate (int n) { return n >= 0; }; bool res = p(-1); Predicate p2 = s => s.StartsWith("A"); res = p2("Apple"); } public void UsePredicate() { int[] arr = { -10, 20, -30, 4, -5 }; // Predicate의 사용 // Array.Find(int[], Predicate) int pos = Array.Find(arr, IsPositive); // LINQ에서 Func의 사용 // Where(Func predicate) var v = arr.Where(n => n >= 0); } bool IsPositive(int i) { return i >= 0; } }