대리자 익명 함수 정의 (*꼭 알아야 할 것*)
*****익명 함수 (*꼭 알아야 할 것*)
익명 함수는 대리자 형식이 예상되는 곳에서 항상 사용할 수 있는 “인라인” 문 또는 식입니다.
이를 사용하여 명명된 대리자를 초기화하거나 명명된 대리자 형식 대신 이를 메서드 매개 변수로
전달할 수 있습니다.
람다 식 또는 무명 메서드를 사용하여 익명 함수를 만들 수 있습니다.
이해하기 쉬운 방법을 제공 하는 람다 식을 사용하는 것이 좋습니다.
익명 함수를 만들 수 있는 방법에는 두가지가 있다
1. 람다식
2. 무명메서드
delegate 연산자는 대리자 형식으로 변환될 수 있는 무명 메서드를 만듭니다.
대리자 클래스 Action<T.....T16>
public delegate void Action<in T><T obj>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HelloWorld1
{
class App
{
//매개변수가 있는 대리자 정의
delegate void Del(int a);
//생성자
public App()
{
//무명 메서드
Action action = delegate {
Console.WriteLine("Hello World!");
};
Action<int> action2 = delegate
{
Console.WriteLine("?");
};
action2(1);
Action<int> action3 = delegate (int a)
{
Console.WriteLine(a);
};
action2(2);
}
}
}
*람다식
‘람다 식’을 사용하여 익명 함수를 만듭니다. 람다 선언 연산자=>를 사용하여 본문에서 람다의 매개 변수 목록을 구분합니다.
람다 식은 두가지 이다.
1.식 람다
(input-parameters) => expression
2.문 람다
(input-parameters) => { <sequence-of-statements> }
***람다 식은 대리자 형식으로 변환할 수 있습니다.
람다 식에서 값을 반환하지 않는 경우 Action 대리자 형식 중 하나로 변환할 수 있습니다.
값을 반환하는 경우 Func 대리자 형식으로 변환할 수 있습니다.
<매개변수/반환타입>
Func<int, int> square = x => x * x;
대리자 변수 선언 / 람다 식
**람다식을 왜만드니? 익명 함수 메서드를 만들기 위해서!**
*식 람다
=> 연산자의 오른쪽에 식이 있는 람다 식을 식 람다라고 합니다. 식 람다는 식의 결과를 반환하며 기본 형식은 다음과 같습니다.
-람다 식의 입력 매개 변수는 괄호로 묶습니다. 입력 매개 변수가 0개이면 다음과 같이 빈 괄호를 지정합니다.
*문 람다
문 람다는 다음과 같이 중괄호 안에 문을 지정한다는 점을 제외하면 식 람다와 비슷합니다.
람다 식의 입력 매개 변수는 괄호로 묶습니다. 입력 매개 변수가 0개이면 다음과 같이 빈 괄호를 지정합니다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HelloWorld1
{
class App
{
//생성자
public App()
{
//무명 메서드
Action action = () => { }; //() => { }; = 람다문 , Action은 대리자
//action의 값? Action대리자 클래스의 인스턴스
//대리자 인스턴스를 통해서 메서드 호출
action();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HelloWorld1
{
class App
{
//생성자
public App()
{
//매개변수 1개가 있는 대리자 변수에 람다문을 할당
//Action대리자 클래스 인스턴스화
Action<string> action = (name) => {
Console.WriteLine("Hello {0}", name);
};
action("홍길동");
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HelloWorld1
{
class App
{
//생성자
public App()
{
//매개변수 2개가 있는 대리자 변수에 람다문을 할당
//Action대리자 클래스 인스턴스화
Action<string, int> action = (name, age) => {
Console.WriteLine("name {0}, age: {0}",name, age);
};
action("홍길동", 31);
}
}
}