C# Language람다 식

비고

마감

람다 식은 사용 된 변수 를 암시 적으로 포착하고 클로저를 만듭니다 . 클로저는 일부 상태 컨텍스트와 함께 함수입니다. 컴파일러는 람다식이 주변 컨텍스트의 값을 '둘러 쌉니다'때마다 클로저를 생성합니다.

예 : 다음과 같이 실행될 때

Func<object, bool> safeApplyFiltererPredicate = o => (o != null) && filterer.Predicate(i);

safeApplyFilterPredicatefilterer 의 현재 값에 대한 private 참조를 가지고 있고 Invoke 메소드가 다음과 같이 작동하는 새로 생성 된 객체를 참조합니다.

o => (o != null) && filterer.Predicate(i);

safeApplyFilterPredicate 에있는 값에 대한 참조가 유지되는 한, 현재 filterer 가 참조하는 객체에 대한 참조가 있기 때문에 중요 할 수 있습니다. 이것은 garbage collection에 영향을 filterer 현재 참조하고있는 객체가 변경되면 예기치 않은 동작을 일으킬 수 있습니다.

한편 클로저는 다른 객체에 대한 참조를 포함하는 동작을 캡슐화하기 위해 효과를 심의하는 데 사용할 수 있습니다.

예 :

var logger = new Logger();
Func<int, int> Add1AndLog = i => {
    logger.Log("adding 1 to " + i);
    return (i + 1);
};

클로저를 사용하여 상태 시스템을 모델링 할 수도 있습니다.

Func<int, int> MyAddingMachine() {
    var i = 0;
    return x => i += x;
};

람다 식 관련 예