User Tools

Site Tools


notes:csharp:indexers

This is an old revision of the document!


Indexers in C#

Use indexers to access elements in a class (or a struct) that encapsulates a collection. You can define multiple indexers, each with parameters of different types.

Indexers can be:

  • virtual or abstract
  • declared in interfaces
  • read-only or read-write
  • can have separate access restrictions for setters and getters
  • single-dimension indexers with numeric parameters can participate in data binding

Keep in mind that when the JIT compiler inline property accessors, the performance of data members and properties is the same.

Example: Implement an indexer:

class Tagline
{
    string[] words = "One ring to rule them all".Split();
 
    // Indexer definition
    public string this [int n]
    {
        get
        {
            if (n < 0 || n > words.length-1)
                throw new IndexOutOfRangeException("Index out of range.");
            else
                return words[n];
        }
 
        set
        {
            words[n] = value;
        }
    }
}
...
// Use the indexer.
Tagline s = new Tagline();
Console.WriteLine(s[3]); // displays the word "rule"

An indexer can take more than one parameter (a multidimensional indexer):

public string this [int x, int y]
{
    get { ... }
    set { ... }
}
 
public string this [int arg1, string arg2]
{
    get { ... }
    set { ... }
}

An indexer can use noninteger parameters to define maps and dictionaries:

public City this [string code]
{
    get { ... }
    set { ... }
}
notes/csharp/indexers.1543850173.txt.gz ยท Last modified: 2020/08/26 (external edit)