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

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

В следующем коде показан класс GradeCollection. Это действительно просто обертка для словаря , который содержит имена студентов и их оценки.

public class GradeCollection
{
    // Словарь для хранения студенческих оценок.
    private Dictionary Grades =
        new Dictionary();

    // Свойство индексатора по умолчанию.
    // Получить или установить класс ученика.
    public int this[string student]
    {
        get
        {
            return Grades[student];
        }
        set
        {
            Grades[student] = value;
        }
    }

    // Свойство индексатора по умолчанию.
    // Возвращаем список студентов с этим классом.
    public List this[int score]
    {
        get
        {
            List students = new List();
            foreach (string name in Grades.Keys)
            {
                if (Grades[name] == score) students.Add(name);
            }
            return students;
        }
    }
}

Класс содержит объект Dictionary для хранения имен и оценок учащихся.

Два метода с именем this, который использует квадратные скобки, являются индексаторами. Первый индексщик принимает параметр string (имя студента) и возвращает класс ученика. Он предоставляет методы get и set, которые просто делегируют свою работу объекту Dictionary.

Основная программа использует следующую строку кода для использования этого индексатора для отображения оценки учащегося.

txtGrade.Text = Grades[txtStudent.Text].ToString();

В коде Grades [txtStudent.Text] используется индексатор, чтобы получить оценку для ученика, имя которого находится в txtStudent TextBox. Код преобразует возвращаемый класс в строку и отображает его в txtGrade TextBox.

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

Grades[txtStudent.Text] = int.Parse(txtGrade.Text);

Левая часть выражения представляет класс ученика. Этот оператор устанавливает класс, равный значению в txtGrade TextBox.

Второй индексщик класса принимает целочисленный балл в качестве параметра и возвращает коллекцию студентов с оценками, которые соответствуют этой оценке.

Код индексатора проходит через ключи словаря Grades. Если соответствующий класс учащегося соответствует целевому значению, код добавляет имя ученика в список результатов. После того, как он зациклился на всех именах учеников, индексщик возвращает список.

Источник: http://csharphelper.com/blog/2017/03/give-a-class-default-indexer-properties-in-c/

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