مثلاً وقتی یک آرایه 10 عنصری داشتیم وقتی می خواستیم مثلاً عنصر هفتم رو مقدار دهی کنیم با این فرض که اسم آرایه A باشه این کار رو می کردیم!
حالا indexer رو چه جوری تعریف می کنیم:
indexer مثل property تعریف میشه و set و get داره!
اول سطح دسترسی یا modifier رو تعریف می کنیم! بعد مقدار برگشتی یا return type و در آخر هم مقدار آرگومان ها در کنار کلمه index و در آخر هم set و get:
get
{
// Get codes goes here
}
set
{
// Set codes goes here
}
}
public string this [int index]
get
{
set
{
data[index] = value;
}
public static void Main()
{
MyClass mc = new MyClass();
mc[0] = "Rajesh";
mc[1] = "A3-126";
mc[2] = "Snehadara";
mc[3] = "Irla";
Console.WriteLine("{0},{1},{2},{3},{4}",mc[0],mc[1],mc[2],mc[3],mc[4]);
indexer ها به ارث هم می رسن:
class Base
{
public int this[int indxer]
{
get
{
Console.Write("Base GET");
return 10;
}
set
{
Console.Write("Base SET");
}
}
class Derived : Base
{
...
..
}
class program
{
public static void Main()
{
Derived d1 = new Derived();
d1[0] = 10;
Console.WriteLine(d1[0]);
}
}
using System;
class Base
{
public virtual int this[int index]
{
get
{
Console.Write("Base GET");
return 10;
}
set
{
Console.Write("Base SET");
}
}
}
class Derived : Base
{
public override int this[int index]
{
get
{
Console.Write("Derived GET");
return 10;
}
set
{
Console.Write("Derived SET");
}
}
}
{
public static void Main()
{
Base b1 = new Derived();
b1[0]= 10;
Console.WriteLine(b1[0]);
}
}
using System;
abstract class Abstract
{
public abstract int this[int index]
{
get;
set;
}
}
class Concrete : Abstract
{
public override int this[int index]
{
get
{
Console.Write(" GET");
return 10;
}
set
{
Console.Write(" SET");
}
}
}
{
public static void Main()
{
Concrete c1 = new Concrete();
c1[0] = 10;
Console.WriteLine(c1[0]);
}
}
منبع کد ها: http://www.csharphelp.com/2006/04/-c-indexers/