TGViewer
Software Philosophy Software Philosophy @softwarephilosophy · 3.48K subscribers
Post #2328 1.73K
ایندکسر (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

______
Docs Indexers - C# Indexers in C# allow class or struct instances to be indexed like arrays. You can set or get the indexed value without specifying a type or instance member.
  • 👍 4
  • ❤ 3
More from @softwarephilosophy
  1. Sep 27, 2026نگو JEV بگو System One! دنیل کانمن (Daniel Kahneman) توی کتاب معروفش «تفکر، سریع و کند» (T…
  2. Sep 23, 2026بازنویسی کل GitHub Copilot Runtime با Rust 🔶 حدود ۱۲۰،۰۰۰ دلار هزینه توکن و سه هفته وقت ی…
  3. Sep 15, 2026ورک‌شاپ «AI Agents in C# (MAF)» در این ورک‌شاپ به بررسی امکانات جدید برنامه‌نویسی با کتابخ…
  4. Sep 12, 2026کد مدریت شده (Managed Code) در دات‌نت یعنی چی؟ ▫️به زبان ساده: کد مدریت شده (Managed Code)…
  5. Sep 5, 2026آشنایی با Attributeها در سی‌شارپ در سی شارپ، Attributeها برای اضافه کردن metadata یا اطلاع…
  6. Aug 25, 2026اگر در دات نت Agent، MCP Server یا ابزارهای مبتنی بر هوش مصنوعی توسعه میدهی، این پروژه میت…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →