ایندکسر (Indexer) در سی شارپ

تیم تحریریه 1403/12/02 0 22
لینک کوتاه https://zoheirsoftware.com/z/8f1b15ba4 |
ایندکسر (Indexer) در سی شارپ, ویژگی‌های مهم ایندکسر در سی شارپ,محدودیت‌ها و معایب ایندکسر در سی شارپ

ایندکسر (Indexer) در سی شارپ

ایندکسر (Indexer) در #C یک ویژگی قدرتمند در زبان برنامه‌نویسی سی شارپ است که به کلاس‌ها و ساختارها اجازه می‌دهد مانند آرایه‌ها رفتار کنند.

با استفاده از ایندکسرها، می‌توان یک کلاس را به گونه‌ای طراحی کرد که اعضای داخلی آن از طریق شاخص (index) قابل دسترسی باشند، درست مانند آرایه‌ها، اما با انعطاف بیشتر.

ایندکسر یک ویژگی خاص در سی شارپ است که به یک کلاس اجازه می‌دهد رفتاری شبیه به آرایه‌ها داشته باشد.

این بدان معناست که می‌توان اعضای یک کلاس را با استفاده از عملگر [ ] مقداردهی یا مقدارگیری کرد، بدون نیاز به تعریف متدهای Get و Set جداگانه.

 

 

ایندکسر (Indexer) در سی شارپ

مثال ساده از ایندکسر در سی شارپ

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()
  • امکان اضافه، ویرایش و حذف اطلاعات به‌صورت ساده و مستقیم

این روش در برنامه‌های مختلف مانند مدیریت مخاطبین، تنظیمات برنامه، و دسترسی سریع به داده‌ها کاربرد دارد.

دوره های مرتبط
آموزش برنامه نویسی سی شارپ,آموزش پروژه محور سی شارپ,آموزش مقدماتی تا پیشرفته سی شارپ,طراحی نرم افزار تحت ویندوز

آموزش برنامه نویسی سی شارپ

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

999,000 تومان

2.3k بازدید

ارسال دیدگاه

برای ارسال نظر لطفا ورود یا ثبت نام کنید.