In VS2003, since we don't have generics, we have lots of strongly-typed collections. For example, there's the LinkCollection class, which holds objects of type Link.

Now that we have generics, we could replace such collections with:

List<Link>

(well, actually, we couldn't replace them, as that would break existing code, but we could do that for new collections). That seems like a simple solution, but it isn't optimal, for a couple of reasons:

  1. Sometimes the type in the collection isn't sufficiently distinctive, especially if it's a built-in type. You'd like to see something like EmployeeIDCollection rather than List<int>
  2. It's often useful to add additional functionality to the collection beyond what you get from the built-in collection class.

The better solution is to define your own collection class. Nicely, you can base it off of the collection class:

class EmployeeIDCollection: List<int>
{
   ...
}

The design guideline is not to expose collection classes, but rather to expose custom collection classes (I really need a better name for those) instead.