Что означает "это [0]" означает в С#?
Я просматривал некоторый код библиотеки и видел такой метод, как:
public CollapsingRecordNodeItemList List
{
get { return this[0] as CollapsingRecordNodeItemList; }
}
Класс, содержащий этот метод, не является списком или чем-то итерабельным, так что означает this[0]
?
Ответы
Ответ 1
Найдите indexer в классе.
С# позволяет вам определять индексаторы, чтобы разрешить этот вид доступа.
Вот пример из официального руководства для "SampleCollection".
public T this[int i]
{
get
{
// This indexer is very simple, and just returns or sets
// the corresponding element from the internal array.
return arr[i];
}
set
{
arr[i] = value;
}
}
Вот определение из официальной спецификации языка:
Индекс - это член, который позволяет индексировать объекты так же, как и массив. Индексатор объявляется как свойство, за исключением того, что это имя элемента, за которым следует список параметров, написанный между разделителями [и]. Параметры доступны в аксессуарах (-ах) индексатора. Подобно свойствам, индексаторы могут быть прочитаны и записаны, доступны только для чтения и только для записи, а аксессоры (и) индексатора могут быть виртуальными.
Полное и полное определение можно найти в разделе 10.9 Indexers спецификации.
Ответ 2
Это означает, что тип объявления (или базовый класс) имеет "индексатор", который предположительно принимает int
(или аналогичный) и возвращает... что-то (возможно, object
?). Код вызывает индексатор get
accessor, передавая 0
в качестве индекса - и затем обрабатывает возвращаемое значение как CollapsingRecordNodeItemList
(или null
возвращаемое значение несовместимо с этим).
Например:
public object this[int index] {
get { return someOtherList[index]; }
}
Проще всего сделать это шаг в это. Это скажет вам точно, где он собирается.
Ответ 3
Предполагая, что сам класс наследуется от какой-либо формы, если IList
/IList<T>
, он просто возвращает (и отличает) первый элемент в коллекции.
public class BarCollection : System.Collections.CollectionBase
{
public Bar FirstItem
{
get { return this[0] as Bar; }
}
#region Coming From CollectionBase
public Object this[ int index ] {
get { return this.InnerList[index]; }
set { this.InnerList[index] = value; }
}
#endregion
}
Ответ 4
Это означает вызов метода item
property get
в этом классе. Он назвал класс Indexer
Индексаторы позволяют индексировать экземпляры класса или структуры как массивы. Индексаторы напоминают свойства, за исключением того, что их аксессоры принимают параметры.