728x90
우선 아래와 같이 생긴 델리게이트를 선언했다고 하자
delegate void MyDelegate<T1, T2>(T1 a, T2 b);
MyDelegate<int, int> myDelegate;
델리게이트를 선언하기 위해서는 이렇게 두줄로 선언을 해줘야 한다.
만약 무명메소드로 잠깐 사용하거나 델리게이트 형태가 많은 경우 모두 선언해줘야 하는데, 이럴대는 불편할 수 밖에 없다. 이러한 불편함을 없애기 위해서 Action과 Func delegate를 사용할 수 있다!
💡Action와 Func를 사용하는 경우 System namespace를 사용해야함.
Action과 Func의 차이는 반환하는 값이 있느냐 없느냐로 나눌 수 있다.
-> 반환값이 없을 경우(void)에는 Action을 사용하고, 반환값이 있는 경우에는 Func를 사용한다.
위에서 만든 delegate는 반환값이 없으므로 Action을 사용해서 한번 만들어보자!
Action<int, int> myDelegate2;
이런식으로 간단하게 delegate를 선언할 수 있다!
만약 반환값이 있는 delegate는 어떨까? Func로 한번 작성해보자!
delegate string MyDelegate<T1, T2>(T1 a, T2 b);
MyDelegate<int, int> myDelegate;
Func<int, int, string> myDelegate3;
이때 myDelegate와 myDelegate3은 똑같다!
이렇게 Action과 Func로 선언한 delegate들은 람다식을 이용해서 코드를 작성할 수 있다!
myDelegate3 = (int a, int b) => { int sum = a + b; return sum + "이 리턴되었습니다"; };
myDelegate3(3,5); //결과: 8이 리턴되었습니다.
728x90
'study > 코딩' 카테고리의 다른 글
[c# 개념] 코루틴(Coroutine) (0) | 2023.05.30 |
---|---|
[c# 개념] 람다식(Lambda Expression) (0) | 2023.05.30 |
[c# 개념] enum(열거형) (0) | 2023.05.30 |
[c# 개념] struct 와 class의 차이 (0) | 2023.05.30 |
[c# 개념] Dictionary<> 중복 안되게 값 추가 (0) | 2023.05.30 |