Сделать свойство индексатора по умолчанию для класса в C#
Классы, такие как Dictionary и List предоставляют свойство индексатора по умолчанию, которое позволяет вам получать доступ к значениям, используя синтаксис, аналогичный тому, который вы используете для доступа к значениям в массиве. Например, следующие наборы кода, а затем получает фамилию из словаря .
Dictionarynames = 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) { // Создаем словарь. DictionaryWithDefaultdict = 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"]); }