This chapter began with a discussion of delegates and their use as references to methods or callbacks. This powerful concept enables you to pass a set of instructions to call in a different location, rather than immediately, when coding the instructions.
The concept of lambda expressions is a syntax that supersedes (but does not eliminate) the anonymous method syntax.12 These constructs allow programmers to assign a set of instructions to a variable directly, without defining an explicit method that contains the instructions. This construct provides significant flexibility for programming instructions dynamically within the method—a powerful concept that greatly simplifies the programming of collections through the LINQ API.
The chapter ended with a discussion of the concept of expression trees and a consideration of how they compile into objects that represent the semantic analysis of a lambda expression rather than the delegate implementation itself. This important feature supports such libraries as the Entity Framework and LINQ to XML—that is, libraries that interpret the expression tree and use it within contexts other than anonymous functions.
Lambda expressions encompass both statement lambdas and expression lambdas. In other words, both statement lambdas and expression lambdas are types of lambda expressions.
One thing that the chapter mentioned but did not elaborate on was multicast delegates. The next chapter investigates multicast delegates in detail and explains how they enable the publish–subscribe pattern with events.