O'Reilly logo

C# Cookbook by Jay Hilyard, Stephen Teilhet

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

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 ...

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