대리자를 선언한 뒤, 이 대리자 형식의 참조에 람다식을 대입하여 사용할 수 있다.
람다식으로 생성한 익명메소드는 무명함수
라고 부른다.
class Program
{
delegate int Delg(int x, int y);
static void Main(string[] args)
{
// delegate 키워드를 사용한 익명메소드
Delg subtract = delegate (int a, int b) { return a - b; };
Console.WriteLine(subtract(5, 3)); // 2
// 람다식을 사용한 익명메소드
Delg multiply = (int a, int b) => a * b;
Delg add = (a, b) => a + b; // 매개변수 자료형 생략 가능 (대리자 선언으로부터 유추됨)
Console.WriteLine(multiply(2, 3)); // 6
Console.WriteLine(add(5, 3)); // 8
// 문 형태의 람다식
Delg divide = (a, b) =>
{
int result = 0;
result = a / b;
return result;
};
Console.WriteLine(divide(9, 3)); // 3
}
}
입력 매개변수 갯수가 0~16개인 대리자.
익명메소드 (무명함수)를 간편하게 만들기 위해 존재함.
리턴값이 있는 익명메소드를 참조하기 위해 .NET에서 사전정의한 대리자.
https://docs.microsoft.com/ko-kr/dotnet/api/system.func-2?view=net-6.0
static void Main(string[] args)
{
Func<string> gorani = () => "gorani"; // 인수 없고 string 반환
Func<int, string> goraniWithNum = (a) => $"gorani_{a}"; // 인수 int형 1개, 반환형 string
Func<int, int, int> add = (a, b) => a + b; // 인수 int형 2개, 반환형 int
Console.WriteLine(gorani()); // gorani
Console.WriteLine(goraniWithNum(53)); // gorani_53
Console.WriteLine(add(5, 3)); // 8
}
리턴값이 없는 익명메소드를 참조하기 위해 .NET에서 사전정의한 대리자
class Program
{
static void Main(string[] args)
{
Action printGorani = () => Console.WriteLine("Gorani"); // 인수 없음
printGorani(); // Gorani
Action<string, string> concatStr = (a, b) => Console.WriteLine(a + b);
concatStr("55", "33"); // 5533
Action<int, int> add = (a, b) =>
{
int result = a + b;
Console.WriteLine(result);
};
add(5, 3); // 8
}
}
메소드, 프로퍼티, 인덱서, 생성자, 종료자를 람다식의 형태로 표현한 것
(문은 안됨)
namespace Program
{
class Gorani
{
private string name = "goranigorani";
public List<string> Friends = new List<string>();
// 프로퍼티
public string Name
{
get => name;
set => name = value;
}
// 인덱서
public string this[int idx]
{
get => Friends[idx];
set => Friends[idx] = value;
}
// 생성자 종료자
public Gorani() => Console.WriteLine("생성자 호출");
~Gorani() => Console.WriteLine("종료자 호출");
// 메소드
public void AddFriend(string name) => Friends.Add(name);
public void RemoveFriend(string name) => Friends.Remove(name);
}
class Program
{
static void Main(string[] args)
{
Gorani gorani = new Gorani();
gorani.Name = "wonjin";
Console.WriteLine(gorani.Name);
gorani.AddFriend("one");
gorani.AddFriend("two");
foreach(var friend in gorani.Friends)
{
Console.Write($"{friend} ");
}
Console.WriteLine();
gorani.RemoveFriend("one");
foreach (var friend in gorani.Friends)
{
Console.Write($"{friend} ");
}
}
}
}