Індексатори

Доброї пори часу, сьогодні я розповім що таке індексатори, для чого вони та як їх створювати.

Індексатори надають нам можливість створити клас, в якому буде реалізована можливість доступатись до окремих внутрішніх елементів за допомогою такого синтаксису як і у масивах – [] квадратні скобки. Використовуючи індексатори ми можемо створювати власні реалізації списків та інших структур даних, або зробити надбудову (обгортку) для вже існуючих та додати певну додаткову функціональність.

Наприклад:

public class Collection
{
    private List<Object> items = new List<object>();
    public void Add(Object item)
    {
        this.items.Add(items);
    }
    public void Remove(Object item)
    {
        this.items.Remove(items);
    }
    public Object this[Int32 index]
    {
       get { return this.items[index]; }
    }
 }

Є клас Collection, в якому є посилання на динамічний список. Цей клас насправді є обгорткою для класу List<T>.  Реалізувавши цей клас, ми отримали можливість перехоплювати операції, які будуть викликатись, перед переадресацією виклику класу List. Ми можемо перед викликом методі класу List зробити певну функціональність (внутрішній лічильник, логування і т.д.) Отже індексатор надає нам можливість доступатись до існуючої колекції об’єктів використовуючи зручний для всіх синтаксис масивів. Також доступ до елементів можливий за будь-яким критерієм, наприклад:

public Object this[String index]
{
    // search
}

Тепер пошук елемента буде виконуватись за текстовим значенням і знову використовуючи квадратні скобки!

Надіюсь моя стаття допомогла вам зрозуміти що таке індексатори надала вам ідеї де їх можна використовувати.

Advertisements

, , , ,

  1. Leave a comment

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: