Как дать свойства индексатора по умолчанию для класса в C#
Свойство indexer является свойством, которое другой код может использовать внутри квадратных скобок для доступа к некоторому значению, предоставляемому классом, так же, как вы можете использовать индекс массива. В отличие от массива, индексирующее устройство класса не обязательно должно быть целым числом. Кроме того, вы можете перегрузить индексатор, чтобы предоставить более одного индексатора для класса.
В следующем коде показан класс GradeCollection. Это действительно просто обертка для словаря , который содержит имена студентов и их оценки.
public class GradeCollection { // Словарь для хранения студенческих оценок. private DictionaryGrades = 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. Если соответствующий класс учащегося соответствует целевому значению, код добавляет имя ученика в список результатов. После того, как он зациклился на всех именах учеников, индексщик возвращает список.