Как дать свойства индексатора по умолчанию для класса в 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. Если соответствующий класс учащегося соответствует целевому значению, код добавляет имя ученика в список результатов. После того, как он зациклился на всех именах учеников, индексщик возвращает список.
