سلام
از Indexer استفاده کن، Indexer برای تایپهایی مثل آرایه ساخته شده که چنیدن مقدار درون خودشون دارن.
تنها از یک Indexer در یک کلاس می توان استفاده کرد، Indexer توانایی overload شدن دارد، Indexer بلاک کد دارد و مدیریت آن سهل و کاربردی است، از یک Indexer که در interface ایجاد شده است می توان در چندین کلاس استفاده کرد و کارکردهای متفاوتی برای Indexer در نظر گرفت.
مثال
Indexer در کلاس :
namespace IndexerInClass
{
public class Test
{
private int[] Array = new int[3];
public int this[int i]
{
get { return Array[i]; }
set { Array[i] = value; }
}
}
class Program
{
static void Main(string[] args)
{
Test objTest = new Test();
objTest[0] = 25;
objTest[1] = 26;
objTest[2] = 27;
for (int i = 0; i < 3; i++)
{
System.Console.WriteLine(objTest[i]);
}
System.Console.ReadKey();
}
}
}
Indexer دز Interface:
namespace IndexerInInterface
{
interface ITest
{
int this[int i]
{
get;
set;
}
}
public class Test : ITest
{
private int[] Array = new int[3];
public int this[int i]
{
get { return Array[i]; }
set { Array[i] = value; }
}
}
class Program
{
static void Main(string[] args)
{
Test objTest = new Test();
objTest[0] = 25;
objTest[1] = 26;
objTest[2] = 27;
for (int i = 0; i < 3; i++)
{
System.Console.WriteLine(objTest[i]);
}
System.Console.ReadKey();
}
}
}
کار با عبارتهای منطقی هم راحتتر میشه
namespace IndexerInBoolean
{
public class Test
{
private bool[] Short = new bool[16]; //short شبیه سازه
public bool this[int i]
{
get { return Short[i]; }
set {Short[i] = value; }
}
}
class Program
{
static void Main(string[] args)
{
Test objTest = new Test();
objTest[1] = true; //0000000000000010
objTest[16] = true; //1000000000000010
}
}
}