Сделать свойство индексатора по умолчанию для класса в C#

Классы, такие как Dictionary и List предоставляют свойство индексатора по умолчанию, которое позволяет вам получать доступ к значениям, используя синтаксис, аналогичный тому, который вы используете для доступа к значениям в массиве. Например, следующие наборы кода, а затем получает фамилию из словаря .

Dictionary names =
    new Dictionary();
names["Rod"] = "Stephens";
MessageBox.Show(names["Rod"]);

Вы можете добавить аналогичную функциональность в свой класс, предоставив ему свойство с именем this. Он должен принять специальный параметр в квадратных скобках, который дает индекс, который свойство должно использовать для получения или установки значения.

В этом примере используется класс DictionaryWithDefault. Этот класс в основном является оберткой для Dictionary, но он возвращает значение по умолчанию, если вы пытаетесь получить доступ к ключу, который не находится в Dictionary. Следующий код показывает, как работает класс.

class DictionaryWithDefault
{
    // Храните предметы здесь.
    private Dictionary Entries
        = new Dictionary(); 

    // Значение по умолчанию.
    private TValue DefaultValue;

    // Конструктор.
    public DictionaryWithDefault(TValue default_value)
    {
        DefaultValue = default_value;
    }

    // Создаем свойство indexer.
    public TValue this[TKey key]
    {
        get
        {
            // Возвращаем значение для этого ключа или значения по умолчанию.
            if (Entries.ContainsKey(key)) return Entries[key];
            return DefaultValue;
        }
        set
        {
            // Установите значение свойства для ключа.
            Entries.Add(key, value);
        }
    }
}

Это общий класс с параметрами типа TKey и TValue. Большая часть кода относительно проста (если вы понимаете общие классы).

Интересной частью является свойство индексатора. Метод get возвращает соответствующее значение, если индекс находится в Dictionary или значение по умолчанию в противном случае. Метод set просто сохраняет пару ключ / значение в Dictionary.

Следующий код показывает, как пример программы использует класс DictionaryWithDefault.

private void Form1_Load(object sender, EventArgs e)
{
    // Создаем словарь.
    DictionaryWithDefault dict =
        new DictionaryWithDefault("");

    // Добавьте некоторые слова в словарь.
    dict["Ann"] = "Archer";
    dict["Chuck"] = "Cider";
    dict["Dora"] = "Deevers";

    // Отображение некоторых значений.
    lstNames.Items.Add("Ann" + " " + dict["Ann"]);
    lstNames.Items.Add("Ben" + " " + dict["Ben"]);
    lstNames.Items.Add("Chuck" + " " + dict["Chuck"]);
    lstNames.Items.Add("Dora" + " " + dict["Dora"]);
    lstNames.Items.Add("Ed" + " " + dict["Ed"]);
}

Источник: http://csharphelper.com/blog/2015/05/make-a-default-indexer-property-for-a-class-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector