Indexers allow instances of a class or struct to be indexed just like arrays. Indexers resemble properties except that their accessors take parameters.
In the following example, a generic class is defined and provided with simple get and set accessor methods as a means of assigning and retrieving values. The Program class creates an instance of this class for storing strings.
class SampleCollection<T> { // Declare an array to store the data elements. private T[] arr = new T[100]; // Define the indexer, which will allow client code // to use [] notation on the class instance itself. // (See line 2 of code in Main below.) public T this[int i] { get { // This indexer is very simple, and just returns or sets // the corresponding element from the internal array. return arr[i]; } set { arr[i] = value; } } } // This class shows how client code uses the indexer. class Program { static void Main(string[] args) { // Declare an instance of the SampleCollection type. SampleCollection<string> stringCollection = new SampleCollection<string>(); // Use [] notation on the type. stringCollection[0] = "Hello, World"; System.Console.WriteLine(stringCollection[0]); } }
-
Indexers enable objects to be indexed in a similar manner to arrays.
-
A get accessor returns a value. A set accessor assigns a value.
-
The this keyword is used to define the indexers.
-
The value keyword is used to define the value being assigned by the set indexer.
-
Indexers do not have to be indexed by an integer value; it is up to you how to define the specific look-up mechanism.
-
Indexers can be overloaded.
-
Indexers can have more than one formal parameter, for example, when accessing a two-dimensional array.
For more information, see the following sections in the C# Language Specification:
-
1.6.7.3 Indexers
-
10.2.9.3 Member names reserved for indexers
-
10.9 Indexers
-
13.2.4 Interface indexers
Concepts
Reference
Also note that indexers can have more than one argument. A very simple example follows:
declaration:
class Mlass
{
private int[,] mint = new int[100,100];
public int this[int i, int j]
{
get
{
return mint[i, j];
}
set
{
mint[i, j] = value;
}
}
}
usage:
Mlass m = new Mlass();
m[2, 2] = 3;Console.WriteLine(m[2, 2]);