In this chapter, we reviewed the key collection classes and considered how they fit into categories according to the interfaces that they support. Each class focuses on inserting items into and retrieving items from the collection, using mechanisms such as by key, by index, or by FIFO or LIFO, to name a few examples. We also explored how to iterate over the collection. In addition, the chapter explained how to define custom collections with custom iterators for enumerating through items within the collection. (Iterators involve a contextual keyword, yield, that C# uses to generate the underlying CIL code that implements the iterator pattern used by the foreach loop.)
In Chapter 18, we explore reflection, a topic briefly touched on earlier, albeit with little to no explanation. Reflection allows us to examine the structure of a type within CIL code at runtime.