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.