Beruflich Dokumente
Kultur Dokumente
Indexers are real easy. They allow your class to be used just like an
array. On the inside of a class, you manage a collection of values any
way you want. These objects could be a finite set of class members,
another array, or some complex data structure. Regardless of the
internal implementation of the class, its data can be obtained
consistently through the use of indexers. Here's an example.
using System;
/// <summary>
/// A simple indexer example.
/// </summary>
class IntIndexer
{
private string[] myData;
Console.WriteLine("\nIndexer Output\n");
The next class member is the Indexer, which is identified by the this
keyword and square brackets, this[int pos]. It accepts a single position
parameter, pos. As you may have already guessed, the
implementation of an Indexer is the same as a Property. It has get and
set accessors that are used exactly like those in a Property. This
indexer returns a string, as indicated by the string return value in the
Indexer declaration.
Indexer Output
myInd[0]: empty
myInd[1]: empty
myInd[2]: empty
myInd[3]: Another Value
myInd[4]: empty
myInd[5]: Any Value
myInd[6]: empty
myInd[7]: empty
myInd[8]: empty
myInd[9]: Some Value
using System;
/// <summary>
/// Implements overloaded indexers.
/// </summary>
class OvrIndexer
{
private string[] myData;
private int arrSize;
Console.WriteLine("\nIndexer Output\n");
Listing 11-2 shows how to overload Indexers. The first Indexer, with
the int parameter, pos, is the same as in Listing 11-1, but there is a
new Indexer that takes a string parameter. The get accessor of the
new indexer returns a string representation of the number of items
that match the parameter value, data. The set accessor changes each
entry in the array that matches the data parameter to the value that is
assigned to the Indexer.
Indexer Output
myInd[0]: no value
myInd[1]: no value
myInd[2]: no value
myInd[3]: Another Value
myInd[4]: no value
myInd[5]: Any Value
myInd[6]: no value
myInd[7]: no value
myInd[8]: no value
myInd[9]: Some Value
The reason both Indexers in Listing 11-2 can coexist in the same class
is because they have different signatures. An Indexer signature is
specified by the number and type of parameters in an Indexers
parameter list. The class will be smart enough to figure out which
Indexer to invoke, based on the number and type of arguments in the
Indexer call. An indexer with multiple parameters would be
implemented something like this:
You now know what Indexers are for and how they're used. You can
create an Indexer to access class members similar to arrays.
Overloaded and multi-parameter Indexers were also covered.