O'Reilly logo

C# 3.0 Design Patterns by Judith Bishop

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Pattern Discussion and Comparison

We shall wind up the chapter in two parts. First, we shall consider the Iterator pattern in more detail, and second, we shall compare the Mediator and Observer patterns. Although all three patterns support communication between objects, C#'s language support for the Iterator has projected it into a different category than the other two. The Observer and Mediator still rely on communication via simple method calling.

Language Support for the Iterator Pattern

Fully 25 years ago, iterators were supported by languages such as Alphard and Clu and could be programmed via functions in Ada.[12] During the Java and C# 1.0 and 2.0 era, iterators consisted of the methods for the basic elements of a loop: Current, MoveNext, and Reset. If the programmer implemented these methods in a collection, a foreach loop would call them correctly for objects of that collection. C# 3.0's query expressions together with the IEnumerator interface have vastly simplified the handling of loops over arbitrary collections of data. Consider this excerpt from Example 9-2:

var selection = from n in daysInMonths
         where n.Key.Length > 5
         select n;

In earlier versions of C# iterators, both lambda expressions and delegates were used to express queries and interact with enumerator methods. Using lambda expressions, the selection would be expressed like this:

var selection = daysInMonths.
   Where(s => s.Key.Length>5);

The lambda expression is introduced by the Where keyword and reads like this: ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required