람다식
(input parameter) => (expression 즉 결과 식이다.)
- => : 실행기호
- x => x * x를 하나의 함수로 보면 된다.('람다'이자 '델리게이트'다)
- 왼쪽의 x가 변수고 오른쪽이 리턴 결과다.
- (x)에서 ()는 생략 가능하지만 변수 2개 이상은 반드시 써줘야한다.
람다 문
(input parameter) => { (expression) }; / 얘도 ()를 생략 가능하다.
람다 특성 정리
- 람다는 대리자를 통해서만 정의될 수 있다.
- Func<int, string> lambda = (int x) => x.ToString();
- 람다식 자체는 형식이 없으므로 object의 어떤 멤버에도 접근 불가능하다.
- .은 오브젝트 단위로만 상속받은 변수에만 나오기 때문에 타입이 없는 변수는 접근이 불가능하다.
//Func<int, string> lambda2 = ((int x) => x).ToString();
- 람다식은 형식이 없으므로 캐스팅 연산이 불가능하다.
- //Func<int, string> lambda2 = ((int x) => x) is Func<int, string>;
- 람다식은 호환 가능한 대리자 형식으로만 변환 가능하다.
- //Func<int, bool> lambda3 = (int x) => x;
- 람다 식은 형식이 없으므로 로컬 변수에서 형식 추론 불가능
- var는 자료형 유추가 가능한 곳에서만 사용 가능하다.
- 델리게이트는 타입 추론이 불가능하다.
//var v = x => x;
- 파라미터에 out 키워드 사용 불가.
- outer 지역 변수에 대한 초기화를 인식할 수 없기 때문이다.
//int[] arr = new int[10];
//foreach (var element in arr) //여기서의 var는 arr에 들어오는 데이터의 타입으로 추론이 가능하다.
//{
//}
익명 메서드
튜플 - Tuple
- 값 또는 자료형을 묶어서 사용하는 기능이다.
- 튜플 : 셀 수 있는 수량의 순서 있는 열거이다.
(float, int) t1 = (3.14f, 5);
구독과 발행 패턴
- 발행자 : 이벤트를 신청해서 전달받는
- 등록 되어있는 한명에게만 보내면 : Anicast
- 등록 되어있는 특정 ‘그룹’에게만 보내면 : Unicast
- 등록자(발행자)에게만 이벤트를 주는 기능 : MultiCast
- 받을 수 있는 모든 사람에게 이벤트를 주는 기능 : BroadCast