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