دسته بندی مقالات
- بیشتر -محصولات
- بیشتر -آخرین مقالات
- بیشتر --
ایندکسر (Indexer) در سی شارپ
1403/12/02 -
RIGHT JOIN در پایگاه داده SQL
1403/12/01 -
LEFT JOIN در پایگاه داده sql
1403/11/28 -
کلمات کلیدی checked و unchecked در سی شارپ
1403/11/26
ایندکسر (Indexer) در سی شارپ

ایندکسر (Indexer) در سی شارپ
ایندکسر (Indexer) در #C یک ویژگی قدرتمند در زبان برنامهنویسی سی شارپ است که به کلاسها و ساختارها اجازه میدهد مانند آرایهها رفتار کنند.
با استفاده از ایندکسرها، میتوان یک کلاس را به گونهای طراحی کرد که اعضای داخلی آن از طریق شاخص (index) قابل دسترسی باشند، درست مانند آرایهها، اما با انعطاف بیشتر.
ایندکسر یک ویژگی خاص در سی شارپ است که به یک کلاس اجازه میدهد رفتاری شبیه به آرایهها داشته باشد.
این بدان معناست که میتوان اعضای یک کلاس را با استفاده از عملگر [ ] مقداردهی یا مقدارگیری کرد، بدون نیاز به تعریف متدهای Get و Set جداگانه.
مثال ساده از ایندکسر در سی شارپ
using System;
class MyCollection
{
private int[] numbers = new int[5]; // آرایه داخلی
// تعریف ایندکسر
public int this[int index]
{
get { return numbers[index]; }
set { numbers[index] = value; }
}
}
class Program
{
static void Main()
{
MyCollection myCollection = new MyCollection();
// مقداردهی با استفاده از ایندکسر
myCollection[0] = 10;
myCollection[1] = 20;
// دریافت مقدار
Console.WriteLine(myCollection[0]); // خروجی: 10
Console.WriteLine(myCollection[1]); // خروجی: 20
}
}
در این مثال، کلاس MyCollection شامل یک آرایهی داخلی است و از طریق ایندکسر این امکان را میدهد که مستقیماً مانند یک آرایه به عناصر آن دسترسی پیدا کنیم.
ویژگیهای مهم ایندکسر در سی شارپ
-
رفتار شبیه آرایه
اجازه میدهد که یک شیء مانند آرایه استفاده شود. -
عدم نیاز به متدهای جداگانه
نیازی به Get و Set جداگانه نیست. -
پشتیبانی از چندین پارامتر
میتوان ایندکسرهایی با چندین پارامتر تعریف کرد. -
میتواند Read-Only یا Write-Only باشد
میتوان اجازهی خواندن یا نوشتن را محدود کرد. -
قابل استفاده در foreach و LINQ
در برخی موارد، ایندکسرها در کوئریهای LINQ و foreach نیز مفید هستند.
مثال از تفاوت Property و Indexer
class Person
{
public string Name { get; set; } // Property
private string[] phoneNumbers = new string[5];
// Indexer برای دسترسی به شماره تلفنها
public string this[int index]
{
get { return phoneNumbers[index]; }
set { phoneNumbers[index] = value; }
}
}
class Program
{
static void Main()
{
Person p = new Person();
p.Name = "Ali"; // استفاده از Property
p[0] = "09121234567"; // استفاده از Indexer
Console.WriteLine(p.Name); // خروجی: Ali
Console.WriteLine(p[0]); // خروجی: 09121234567
}
}
آیا به دنبال یک فرصت عالی برای یادگیری برنامهنویسی هستید؟ 🚀
با دوره آموزشی سیشارپ ما، شما میتوانید مهارتهای خود را به سطح جدیدی ارتقا دهید! این دوره بهطور کامل طراحی شده تا به شما کمک کند تا از مبتدی تا پیشرفته در دنیای برنامهنویسی سیشارپ پیش بروید.
👨🏫 چرا دوره ما را انتخاب کنید؟
- محتوای جامع و عملی: با پروژههای واقعی و تمرینات عملی، یادگیری را به تجربهای جذاب تبدیل کنید.
- مدرس مجرب: از تجربه و دانش مدرس حرفهای بهرهمند شوید که شما را در هر مرحله از یادگیری راهنمایی میکنند.
- پشتیبانی ۲۴/۷: هر زمان که سوالی داشتید، ما در کنار شما خواهیم بود تا به شما کمک کنیم.
- دسترسی مادامالعمر: به محتوای دوره دسترسی دائمی داشته باشید و هر زمان که خواستید، میتوانید به آن مراجعه کنید.
💡 فرصت را از دست ندهید!
بایادگیری سیشارپ، میتوانید در دنیای فناوری اطلاعات به یک متخصص تبدیل شوید و در پروژههای جذاب و چالشبرانگیز شرکت کنید.
همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آیندهای روشنتر بردارید!
شرکت در دوره آموزش برنامه نویسی سی شارپ
پیادهسازی ایندکسرهای پیشرفته
-
ایندکسر با چندین پارامتر
در برخی مواقع، ایندکسر میتواند چندین پارامتر بگیرد، مانند ماتریسهای چندبعدی یا دیکشنریها.
class Matrix
{
private int[,] data = new int[3, 3];
public int this[int row, int col]
{
get { return data[row, col]; }
set { data[row, col] = value; }
}
}
class Program
{
static void Main()
{
Matrix matrix = new Matrix();
matrix[0, 1] = 5; // مقداردهی به ماتریس
Console.WriteLine(matrix[0, 1]); // خروجی: 5
}
}
-
ایندکسر در دیکشنری
using System;
using System.Collections.Generic;
class PhoneBook
{
private Dictionary<string, string> contacts = new Dictionary<string, string>();
public string this[string name]
{
get { return contacts.ContainsKey(name) ? contacts[name] : "Not Found"; }
set { contacts[name] = value; }
}
}
class Program
{
static void Main()
{
PhoneBook phoneBook = new PhoneBook();
phoneBook["Ali"] = "09121234567";
phoneBook["Reza"] = "09351234567";
Console.WriteLine(phoneBook["Ali"]); // خروجی: 09121234567
Console.WriteLine(phoneBook["Sara"]); // خروجی: Not Found
}
}
محدودیتها و معایب ایندکسر در سی شارپ
-
فقط روی نمونههای کلاسها قابل استفاده است
نمیتوان ایندکسر را روی کلاسهای static اعمال کرد. -
امکان نامگذاری ندارد
برخلاف Property، ایندکسر نام خاصی ندارد و از this استفاده میکند. -
قابل جستجو در IntelliSense نیست
به دلیل عدم نامگذاری، در برخی موارد پیدا کردن ایندکسرها دشوار است. -
عدم امکان تعریف static indexer
ایندکسرها باید روی نمونههای کلاس اعمال شوند.
مثال پروژه محور از ایندکسر (Indexer) در سی شارپ
پروژه کوتاه: دفترچه تلفن ساده با ایندکسر در سی شارپ
در این مثال، یک دفترچه تلفن پیادهسازی میکنیم که از ایندکسر برای ذخیره و دریافت شماره تلفن افراد استفاده میکند.
توضیح پروژه
اطلاعات در یک Dictionary<string, string> ذخیره میشود.
کاربر میتواند با استفاده از نام فرد شماره تلفن را دریافت کند.
اگر نام در لیست وجود نداشته باشد، مقدار "Not Found" نمایش داده میشود.
کد کامل پروژه
using System;
using System.Collections.Generic;
class PhoneBook
{
private Dictionary<string, string> contacts = new Dictionary<string, string>();
// ایندکسر برای ذخیره و دریافت شماره تلفن
public string this[string name]
{
get
{
return contacts.ContainsKey(name) ? contacts[name] : "Not Found";
}
set
{
contacts[name] = value;
}
}
}
class Program
{
static void Main()
{
PhoneBook phoneBook = new PhoneBook();
// اضافه کردن شماره تلفن
phoneBook["Ali"] = "09121234567";
phoneBook["Reza"] = "09351234567";
// دریافت شماره تلفن
Console.WriteLine("Ali's Phone: " + phoneBook["Ali"]); // خروجی: 09121234567
Console.WriteLine("Sara's Phone: " + phoneBook["Sara"]); // خروجی: Not Found
// ویرایش شماره تلفن
phoneBook["Ali"] = "09998887766";
Console.WriteLine("Updated Ali's Phone: " + phoneBook["Ali"]); // خروجی: 09998887766
}
}
توضیح کد
- ایندکسر [name] در کلاس PhoneBook برای دریافت و تنظیم شماره تلفن افراد استفاده شده است.
- اگر نام در Dictionary وجود نداشته باشد، مقدار "Not Found" برگردانده میشود.
- در Main() نمونهای از PhoneBook ساخته شده و شمارهها اضافه، دریافت و ویرایش شدهاند.
خروجی اجرای کد
Ali's Phone: 09121234567
Sara's Phone: Not Found
Updated Ali's Phone: 09998887766
مزایای این روش
- دسترسی به شمارهها مانند آرایه (phoneBook["Ali"])
- خوانایی بهتر نسبت به استفاده از متدهای GetPhone() و SetPhone()
- امکان اضافه، ویرایش و حذف اطلاعات بهصورت ساده و مستقیم
این روش در برنامههای مختلف مانند مدیریت مخاطبین، تنظیمات برنامه، و دسترسی سریع به دادهها کاربرد دارد.
دوره های مرتبط

آموزش برنامه نویسی سی شارپ
زبان شی گرایی حرفه ای سی شارپ یک زبان قدرتمند برای طراحی نرم افزار به شمار میرود.