C# Generics: breaking encapsulation?

From: K.K. (kkaitan)
Date: 01/13/05


Date: Wed, 12 Jan 2005 19:34:52 -0500

Consider the following code:

>>>>>>>>>>>
// Define an empty class
public class ZorgleCollection : Dictionary<string, Zorgle>
{
}

// Somewhere outside ZorgleCollection:

  // Print all the elements in this collection.
  public void PrintAllMembers(ZorgleCollection collection)
  {
    // Method 1 -- foreach.
    // Can't fill in the blank without specifying the types of the
    // template parameters. But this breaks encapsulation!

    foreach( ____(type name)____ entry in collection)
    {
      Console.WriteLine("Found entry: {0}", entry.Value);
    }

    // Method 2 -- use an enumerator.
    // Still can't fill in the blank without specifying the types of
    // the template parameters -- which also breaks encapsulation!

    ____(type name)____ enumerator = collection.GetEnumerator();

    while (enumerator.MoveNext())
    {
      Console.WriteLine("Found entry: {0}", entry.Value);
    }
  }

// ...
<<<<<<<<<<<

We can't use an enumerator without first knowing the template's type
parameters. By extension, since foreach is really just syntactic sugar
around enumerators, we can't use foreach either. How can I walk through the
collection without specifying the type, which breaks encapsulation and
creates dependencies? Or is this a doomed effort?


Loading