Indexers are a special type of array which is used
to treat an object as array.
We say that indexer is a member which enables an object to be indexed just like
array.
Indexers are permit to instances of a class or Structs to be indexed just like arrays.
Indexers are similar to properties.
Indexer is most useful for looping or iterating or data binding operations in c#.
Syntax
declaration of an indexer
public int this[index]
{
get { }
set { }
}
Modifier can
be public, private, protected or internal. Just look like this....
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
The modifier can be private, public, protected,
internal.
Indexers cannot be static because static methods do
not have access to ‘this’ and ‘this’ keyword indicates an instance of the
current class.
Every indexers should accept at least one parameter.
Simple
example for display Employee name using Indexer
using System;
using
System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Indexers
{
public class Employee
{
public string[] emp_Name = new string[25];
public string this[int index]
{
get
{
return emp_Name[index];
}
set
{
emp_Name[index] = value;
}
}
}
public class Program
{
public static void Main()
{
Employee empObject = new Employee();
empObject[0] = "Anil
Singh";
empObject[1] = "Sunil";
empObject[2] = "Sushil
Kumar";
for (int i = 0; i < 3;
i++)
{
Console.WriteLine(empObject[i]);
}
Console.ReadLine();
}
}
}
The
OutPut as given below
Anil
Singh
Sunil
Sushil
Kumar
===============================================
Other detail as given below.
- Indexers using Inheritance
- The indexers of the base class are inherited in the derived classes.
- Simple example for Indexers in Inheritance
using System;
using
System.Collections.Generic;
using System.Linq;
using System.Text;
namespace IndexersInheritance
{
public class BaseClass
{
public int num;
public int this[int index]
{
get
{
return num;
}
set
{
num = value;
}
}
}
public class DerivedClass : BaseClass
{
// Anything else here.....
}
public class TestClass
{
public static void Main()
{
DerivedClass DrivObj = new DerivedClass();
DrivObj[0] = 786;
Console.WriteLine("The Value is
= "
+ DrivObj[0]);
Console.Read();
}
}
}
The
OutPut as given below
The
Value is = 786
==============================================
Indexers
using interface
using System;
using
System.Collections.Generic;
using System.Linq;
using System.Text;
interface I1
{
int this[int num] { get; set; }
}
public class InterfaceImplement : I1
{
int[] d = { 0, 1, 2, 3
};
public int this[int num]
{
get
{
return this.d[num];
}
set
{
this.d[num] = value;
}
}
}
public class Program
{
static void Main()
{
I1 i1Obj = new InterfaceImplement();
Console.WriteLine(i1Obj[0]);
Console.WriteLine(i1Obj[1]);
Console.WriteLine(i1Obj[2]);
Console.WriteLine(i1Obj[3]);
Console.Read();
}
}
The
OutPut as given below
0
1
2
3
============================================
Indexers can
be Abstract
Simple example for Abstract Indexers
using System;
using
System.Collections.Generic;
using System.Linq;
using System.Text;
abstract class BaseClass
{
protected int num;
public abstract int this[int index]
{
get;
set;
}
}
class DerivedClass : BaseClass
{
public override int this[int index]
{
get
{
return num;
}
set
{
num = value;
}
}
}
class TestClass
{
public static void Main()
{
DerivedClass objDeriv = new DerivedClass();
objDeriv[0] = 786;
Console.WriteLine("The value is
= "
+ objDeriv[0]);
Console.Read();
}
}
The
OutPut as given below
The
value is = 786