지난번 델리게이트에 이어..
+ Action
public delegate void TestDel();
public delegate void OnReduceHp();
와 같이 리턴타입과 매개변수가 없는 델리게이트를 여러개 만들 필요가 있을까? >>없다.
그래서 Action이 존재한다.
Action이란?
return 타입이 void이고 매개변수가 없는 delegate를 미리 선언한 것

public Action onActionNormal;
//Action은 return 타입이 void이고 매개변수가 없는 delegate를 미리 선언한 것
//public delegate void Action();
//Action<T>는 리턴타입이 없지만 매개변수가 존재할 때.
//public delegate void Action<T>(T value);
public Action<float> onActionFloat;
public Action<float, int> onActionFloatInt;
public Func<int> onFuncInt; //리턴타입이 있는 action이라고 생각하면됨
public Func<float, int> onFuncFloatInt; //앞에있는것들이 매개변수, 마지막이 리턴타입

+ Func
Action과 Func의 차이점은
Action은 반환값이 없는 익명 함수이고
Func함수는 반환값이 있는 익명 함수이다.
Action : 리턴타입x, 매개변수x
Action<T> : 매개변수 T
Func<Tresult> : 리턴타입 TResult
Func<T, Tresult> : 매개변수 T, 리턴타입 TResult

사용 예시)


+event
public event Action onAction;
deligate와 event의 차이는?
event라는 수식어가 붙은 델리게이트는 클래스 내부에서만 호출할 수 있음

체인을 거는 것은 외부에서도 가능하다.
다른 클래스에서 호출 못하게 하려는 이유는 클래스 간 결합도를 낮추기 위함이다.

+ 람다, 람다문
- 람다란? 무명메서드
- 형식? ()=> {};
- 목적? 간단한 처리 하나를 위해 함수를 만드는 것은 비효율적. 이 때 쓰는 것이 람다

람다의 단점 : 추적이 안되고, 가독성이 더 떨어질 때가 있음
주의)
재정의 될 가능성이 있는 함수는 웬만하면 건들지 않는다.
체인을 풀어주는 함수는 람다로 만들지 않는다.
'C# > C# 학습 (TIL)' 카테고리의 다른 글
C# 중급문법 Day6 EventHandler (0) | 2022.06.21 |
---|---|
C# 디자인패턴 : 전략패턴 (0) | 2022.06.20 |
C# 중급문법 Day4 Deligate (0) | 2022.06.17 |
C# 중급문법 DAY3 싱글톤의 일반화 (0) | 2022.06.16 |
C# 중급문법 DAY1 추상클래스/인터페이스/콜렉션/foreach/var/object (0) | 2022.06.15 |