// C#
// 람다식을 활용하여 delegate에 메서드 참조
delegate int CountDelegate(int number);
CountDelegate count = (number) => { return number + number; };
// C#
List<int> dataList = new List<int> { 1, 2, 3, 4, 5 };
// List의 FindAll 함수를 직접 찾아가 보면 매개변수로 bool형을 리턴하는 delegate를 받게 되어있다.
List<int> findAllList = dataList.FindAll((num) => { return num < 3; }); // return을 명시할 땐 {}를 사용
Console.WriteLine("3보다 작은 수");
foreach (var number in findAllList)
{
Console.WriteLine(number);
}
int findNum = dataList.Find((num) => num % 2 == 0); // return을 명시하지 않을 땐 {}를 사용하지 않음
Console.WriteLine("짝수 : " + findNum);
Output:
3보다 작은 수
1
2
짝수 : 2
// C#
delegate void printDelegate(string message);
delegate void funcDeleaget();
class Program
{
public static void Call(string message)
{
Console.WriteLine(message);
}
public static void CallBack(printDelegate dp, string message)
{
if (dp != null)
{
dp("Call Back : " + message);
}
}
static void Main(string[] args)
{
CallBack(Call, "Hello 1"); // 미리 구현된 메서드를 참조
// delegate로 익명 메소드를 구현하여 참조시킴
CallBack(delegate (string message) { Console.WriteLine(message); }, "Hello 2");
// 람다식으로 메소드를 구현하여 참조시킴
// 파라미터 타입 생략 가능
CallBack((string message) => Console.WriteLine(message), "Hello 3");
// 파라미터가 있는 경우에는 ()를 생략할 수 있지만, 파라미터가 없는 경우에는 ()를 생략할 수 없다.
CallBack(message => Console.WriteLine(message), "Hello 4");
funcDeleaget fd = () => Console.WriteLine("Hello 5");
}
}
// C#
static void CallAction()
{
Console.WriteLine("CallAction");
}
static void Main(string[] args)
{
Action func1;
Action<int> func2;
Action<float, int> func3;
func1 = CallAction;
func2 = (num) => Console.WriteLine("num : " + num);
func3 = (a, b) =>
{
float result = b / a;
Console.WriteLine($"a : {a}, b : {b}, result : {result}");
};
func1();
func2(100);
func3(6.0f, 10);
}
// C#
static int CallFunc()
{
return 100;
}
static void Main(string[] args)
{
// <>안에 마지막 타입이 리턴 타입이 된다.
Func<int> func1;
Func<int, float> func2;
Func<int, int, int> func3;
func1 = CallFunc;
func2 = number => (float)(number / 2.0f);
func3 = (a, b) => a + b;
Console.WriteLine("func1 : "+ func1());
Console.WriteLine("func2 : "+ func2(10));
Console.WriteLine("func3 : "+ func3(100, 150));
}