3.18. Calling the Same Method on Multiple Object Types

Problem

You need to perform a particular action on a set of dissimilar objects contained within an array or collection, preferably without having to know each individual object’s type.

Solution

Use interfaces in a polymorphic manner. The following interface contains a single method, Sort, which allows sorting to be performed on the object that implements this interface:

public interface IMySort
{
    void Sort( );
}

The next three classes implement the IMySort interface. These classes all share the same Sort method, but each class implements it in a different way:

public class CharContainer : IMySort
{
    public void Sort( )
    {
        // Do character type sorting here

        Console.WriteLine("Characters sorted");
    }
}

public class NumberContainer : IMySort
{
    public void Sort( )
    {
        // Do numeric type sorting here

        Console.WriteLine("Numbers sorted");
    }
}

public class ObjectContainer : IMySort
{
    public void Sort( )
    {
        // Do object type sorting here

        Console.WriteLine("Objects sorted");
    }
}

The SortAllObjects method accepts an array of objects :

public void SortAllObjects(IMySort[] sortableObjects)
{
    foreach (IMySort m in sortableObjects)
    {
        m.Sort( );
    }
}

If this method is called as follows:

Obj.SortAllObjects(new IMySort[3] {new CharContainer( ), 
                                  new NumberContainer( ), 
                                  new ObjectContainer( )});

the following is displayed:

Characters sorted
Numbers sorted
Objects sorted

Discussion

The foreach loop is useful not only for iterating over individual elements in a collection ...

Get C# Cookbook now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.