• Indexers enable objects to be indexed in a similar way 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.
  • Indexers in C#, appears very similar to Property, with parameters.
  • Can be used as arrays in Class or Struct
  • Enables the objects to be sterilized and retrieved with an index.
  • contains get ( that keeps tract of the index) and "set" handles the corresponding values. 
  • Accessors
    • get accessors
      • return var_array[index];
    • set accessors
      • var_array[index]= value;



using System;
//csc indexers_concept_1.cs
//here <custome_index> is a Generics type.
namespace ex_indexer_1
class test_indexers<custom_index>
private custom_index[] arr = new custom_index[100];
public custom_index this[int i]
Console.WriteLine("get array Index : {0}", i);
return arr[i];
arr[i] = value;
Console.WriteLine("\tset value {0}",arr[i] = value);
} }

class test {
static void Main()
test_indexers<string> str = new test_indexers<string>();
test_indexers<string> str1 = new test_indexers<string>();
str[0] = "Hello, World";
System.Console.WriteLine("---view like array--");
str1[0] = "Hello";
str1[1]= "world";

In the above code "<custom_index>", acts as a class constructor. See this example Link.