Definition of Indexers from MSDN
Indexers allow instances of a class or struct to be indexed just like arrays. Indexers resemble properties except that their accessors take parameters.
Whenever you are accessing individual element from List<T> or Hashtable<T,T> etc you are using Indexers.
For example
List<string> str=new List<string>();
str.Add("Rameez");
str.Add("Usmani");
string firstName=str[0]; //[0] is implying that you are calling indexer on instance of List class
How Indexer is added to a class
To add an indexer to a class you have to expose a property named "this(actually a keyword)" followed by "data type of index" in square brackets. Like this
public ReturnDataType this[indexDataType]Lets say you have collection of Students and you want to access Student by name using Indexer , here is how it can be done
{
get { //logic to return the correct value }
set { //logic to set the correct value }
}
public Student this[string Name]
{
get
{
Student std=GetFromCollectionByName(Name);
return std;
}
}
To understand how to implement indexers we will create a class as an example. We will make a class University which has collection of Departments (DepartmentCollection) . DepartmentCollection class will expose indexer to retrieve department by name or index.
Here it is how
public class Department
{
public string Name {get;set;}
public string Code {get;set;}
}
public class DepartmentCollection
{
private List<Department> depts=new List<Department>();
public Department this[string dpName]
{
get
{
for (int a=0;a<depts.Count;a++)
{
if (depts[a].Name.CompareTo(dpName)==0)
{
return depts[a];
}
}
return null;
}
}
public Department this[int dpIndex]
{
get
{
return depts[dpIndex];
}
}
}
public class University
{
private DepartmentCollection depts=new DepartmentCollection();
public DepartmentCollection DepartmentsNow lets see how simply we can access a department in a University class. Right now for simplicity we are not concerned how Departments collection is filled.
{
get { return depts; }
}
}
University ui=new University();
Department dept=ui.Departments[0];
//or
Department dept=ui.Departments["CSIT"];
More about Indexers
Indexers (C# Programming Guide) - MSDN
Using Indexers (C# Programming Guide) - MSDN
Comparisons Between Properties and Indexers (C# Programming Guide) - MSDN
Comments
Post a Comment
Share your wisdom