ایندکسر (Indexer) در سیشارپ
#csharp_for_beginners
وقتی یک کلاس یا ساختار (struct) را میسازیم، ممکن است بخواهیم از آن مانند آرایهای با “[]” به موقعیتهای کلاس یا ساختار دسترسی داشت: هم خواندن و هم نوشتن. ایندکسرها این امکان را فراهم میکنند. یعنی به جای روشهای معمول مثل GetItem(…) یا SetItem(…)، بتوان نوشت:
myObject[i] = value;
var x = myObject[i];
ساختار ایندکسر
ایندکسر شبیه پراپرتی تعریف میشود، با این تفاوت که زمان get و set یک یا چند پارامتر (معمولاً اندیس) دریافت میکند. برای تعریف ایندکسر از کلمهی کلیدی this استفاده میکنیم:
public class SampleCollection<T>
{
private T[] arr = new T[100];
public T this[int i]
{
get { return arr[i]; }
set { arr[i] = value; }
}
انواع ایندکسر
خواندنی و نوشتنی (Read/Write): هم get و هم set را داراست.
فقط خواندنی (Read-only): فقط get را داراست. مثلاً اگر لازم باشد فقط به دادهها دسترسی دهیم ولی تغییری در دادهها ندهیم.
چند پارامتری: ایندکسر میتواند بیشتر از یک ایندکس داشته باشد، مانند ایندکسر دو بعدی
غیر عددی: الزامی نیست شاخصها عدد باشند؛ میاتونند نوعی مانند رشته، تاریخ یا هر نوع دلخواهی باشند.
موارد استفاده
شبیهسازی آرایه یا لیست: وقتی کلاس شما مانند یک مجموعه عمل میکند، ولی نمیخواهید جزئیات داخلی را بیرون دهید.
دیکشنری / نگاشت (mapping): مثلاً وقتی میخواهید بر اساس کلید (مانند رشته یا تاریخ) مقدار دهی کنید یا مقداری را بگیرید، بجای متدهایی مانند Get یا Find، میتوانید بنویسید: obj[“key”] .
دادههای وابسته به زمان یا تاریخ: مانند ثبت دما بر اساس تاریخ، طوری که بتوانید با obj[date] بخوانید یا بنویسید.
زمانی که نمیخواهیم کل دادهها به صورت همزمان در حافظه داشته باشیم: ممکن است بخشهایی از داده را بر حسب نیاز بارگذاری یا حذف کنید. ایندکسر اجازه میدهد که فقط وقتی به دادهای نیاز داریم، آن قسمت پردازش شود.
🔗 مطلب کامل را در این لینک میتوانید مطالعه کنید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
کانال تلگرام:
@SoftwarePhilosophy
______
Post #2328
1.73K