![](https://www.tahlildadeh.com/Files/Images/Ads/CSharp.webp)
یادگیری سی شارپ از مفاهیم پایه تا پروژه محور: شیگرایی، کار با SQL و LINQ، ORMها (Entity Framework)، ساخت پروژه مدیریت رستوران با گزارشات حرفهای و امکانات کامل!
مشاهده بیشتر![](https://www.tahlildadeh.com/Files/Images/Ads/MVC.webp)
یادگیری MVC Core از مبانی تا پیشرفته: شیگرایی، Routing، Entity Framework، امنیت، تست یونیت، Razor، Ajax، و پروژههای کاربردی! یک دوره کامل برای تسلط بر توسعه وب با ASP.NET Core. به صورت حضوری و آنلاین!
مشاهده بیشترمشخصات مقاله
Indexer در C#
Indexer در C#
با کمک Indexer ها میتوان اشیاء را مانند یک آرایه ایندکس کرد. زمانی که Indexer ی را برای کلاسی تعریف میکنید این کلاس مانند یک آرایهی مجازی رفتار میکند. بعد از این کار میتوانید با استفاده از عملگر دسترسی آرایه ([]) به نمونهی این کلاس دسترسی پیدا کنید.
سینتکس
یک Indexer تک بعدی دارای سینتکس زیر است:
element-type this[int index] { // The get accessor. get { // return the value specified by index } // The set accessor. set { // set the value specified by index } }
استفاده از Indexer ها
اعلان رفتار یک Indexer تا حدی شبیه به یک ویژگی انجام میشود. مشابه با ویژگیها، برای تعریف کردن Indexer ها نیز شما باید از اکسسورهای get و set استفاده کنید. با این حال ویژگیها عضو دادهای مشخصی را برگشت میدهند و یا تنظیم میکنند. این در حالی است که Indexer ها مقدار مشخصی از نمونهی شیء را برگشت میدهند و یا تنظیم میکنند. به بیان دیگر Indexer نمونه داده را به بخشهای کوچکتر تقسیم کرده، هر یک از بخشها را ایندکس میکند و سپس آنها را دریافت یا ارسال میکند.
هنگام تعریف کردن ویژگیها باید اسم ویژگی را فراهم کرد. Indexer ها نه به کمک اسم بلکه به کمک با استفاده از واژهی کلیدی this تعریف میشوند. این واژهی کلیدی به نمونهی شیء اشاره دارد. در مثال زیر به این مفهوم پرداخته شده است:
using System; 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(); } } }
زمانی که کد بالا کامپایل و اجرا میشود، نتیجهی زیر نمایش داده میشود:
Zara Riz Nuha Asif Davinder Sunil Rubic N. A. N. A. N. A.
Indexer های با بار بیش از حد
Indexer ها میتوانند بیش از ظرفیت خود بار حمل کنند. همچنین آنها میتوانند با کمک چندین پارامتر به گونهای که هر یک از این پارامترها نوع متفاوتی داشته باشند، اعلان شوند. الزامی وجود ندارد که ایندکسها عدد صحیحی باشند. با کمک C# میتوان نوع دیگری را برای ایندکسها انتخاب کرد، مانند یک رشته.
در مثال زیر Indexer های با بار بیش از حد نشان داده شدهاند:
using System; 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"; //using the first indexer with int parameter for (int i = 0; i < IndexedNames.size; i++) { Console.WriteLine(names[i]); } //using the second indexer with the string parameter Console.WriteLine(names["Nuha"]); Console.ReadKey(); } } }
زمانی که کد بالا کامپایل و اجرا میشود، نتیجه به صورت زیر نمایش داده میشود:
Zara Riz Nuha Asif Davinder Sunil Rubic N. A. N. A. N. A. 2