CHAPTER 8 WORKING WITH INTERFACES
public int GetNumberOfSides()
{ return 4; }
}
Hopefully, at this point you feel more comfortable with the process of defining and implementing
custom interfaces using the C# syntax. To be honest, interface-based programming can take a while to
get comfortable with, so if you are in fact still scratching your head just a bit, this is a perfectly normal
reaction.
Do be aware, however, that interfaces are a fundamental aspect of the .NET Framework. Regardless
of the type of application you are developing (web-based, desktop GUIs, data-access libraries, etc.),
working with interfaces will be part of the process. To summarize the story thus far, remember that
interfaces can be extremely useful when
•
You have a single hierarchy where only a subset of the derived types supports a
common behavior.
•
You need to model a common behavior that is found across multiple hierarchies
with no common parent class beyond System.Object.
Now that you have drilled into the specifics of building and implementing custom interfaces, the
remainder of this chapter examines a number of predefined interfaces contained within the .NET base
class libraries.
Source Code The MIInterfaceHierarchy project is located under the Chapter 8 subdirectory.
The IEnumerable and IEnumerator Interfaces
To begin examining the process of implementing existing .NET interfaces, let’s first look at the role of
IEnumerable and IEnumerator. Recall that C# supports a keyword named foreach that allows you to
iterate over the contents of any array type:
// Iterate over an array of items.
int[] myArrayOfInts = {10, 20, 30, 40};
foreach(int i in myArrayOfInts)
{
Console.WriteLine(i);
}
While it might seem that only array types can make use of this construct, the truth of the matter is
any type supporting a method named GetEnumerator() can be evaluated by the foreach construct. To
illustrate, begin by creating a new Console Application project named CustomEnumerator. Next, add the
Car.cs and Radio.cs files defined in the SimpleException example of Chapter 7 (via the Project Add
Existing Item menu option).
302