C# Indexer
IndexerAllows an object to be accessed using subscripts in the same way as an array.
When you define an indexer for a class, the class behaves like anvirtual arrayarray. You can use the array access operator[ ]To access the members of the class.
Syntax
The syntax for a one-dimensional indexer is as follows:
{
// get accessor
get
{
// Returns the value specified by index
}
// set accessor
set
{
// Sets the value specified by index
}
}
Purpose of indexers
The declaration of indexer behavior is somewhat similar to a property. Like a property, you can usegetandsetAccessors are used to define indexers. However, properties return or set a specific data member, whereas indexers return or set a specific value of an object instance. In other words, they divide instance data into smaller parts and index each part, getting or setting each part.
Defining a property involves providing a property name. An indexer is defined without a name, but withthisThe keyword, which points to the object instance. The following example demonstrates this concept:
Example
namespace IndexerApplication
{
class IndexedNames
{
private string[] namelist = new string[size];
static public int size = 10;
public IndexedNames()
{
for (int i = 0; i < size; i++)
namelist[i] = "N. A.";
}
public string this[int index]
{
get
{
string tmp;
if( index >= 0 && index <= size-1 )
{
tmp = namelist[index];
}
else
{
tmp = "";
}
return ( tmp );
}
set
{
if( index >= 0 && index <= size-1 )
{
namelist[index] = value;
}
}
}
static void Main(string[] args)
{
IndexedNames names = new IndexedNames();
names[0] = "Zara";
names[1] = "Riz";
names[2] = "Nuha";
names[3] = "Asif";
names[4] = "Davinder";
names[5] = "Sunil";
names[6] = "Rubic";
for ( int i = 0; i < IndexedNames.size; i++ )
{
Console.WriteLine(names[i]);
}
Console.ReadKey();
}
}
}
When the above code is compiled and executed, it produces the following result:
Zara Riz Nuha Asif Davinder Sunil Rubic N. A. N. A. N. A.
Overloading Indexers
Indexers can be overloaded. Indexers can also be declared with multiple parameters, and each parameter can be of a different type. Indexers do not have to be integer-based. C# allows indexers to be of other types, such as string.
The following example demonstrates overloading indexers:
Example
namespace IndexerApplication
{
class IndexedNames
{
private string[] namelist = new string[size];
static public int size = 10;
public IndexedNames()
{
for (int i = 0; i < size; i++)
{
namelist[i] = "N. A.";
}
}
public string this[int index]
{
get
{
string tmp;
if( index >= 0 && index <= size-1 )
{
tmp = namelist[index];
}
else
{
tmp = "";
}
return ( tmp );
}
set
{
if( index >= 0 && index <= size-1 )
{
namelist[index] = value;
}
}
}
public int this[string name]
{
get
{
int index = 0;
while(index < size)
{
if (namelist[index] == name)
{
return index;
}
index++;
}
return index;
}
}
static void Main(string[] args)
{
IndexedNames names = new IndexedNames();
names[0] = "Zara";
names[1] = "Riz";
names[2] = "Nuha";
names[3] = "Asif";
names[4] = "Davinder";
names[5] = "Sunil";
names[6] = "Rubic";
// Use the first indexer with an int parameter
for (int i = 0; i < IndexedNames.size; i++)
{
Console.WriteLine(names[i]);
}
// Use the second indexer with a string parameter
Console.WriteLine(names["Nuha"]);
Console.ReadKey();
}
}
}
When the above code is compiled and executed, it produces the following result:
Zara Riz Nuha Asif Davinder Sunil Rubic N. A. N. A. N. A. 2other extensions