Что означает "this[0]" в C#?
Я просматривал какой-то код библиотеки и увидел такой метод, как:
public CollapsingRecordNodeItemList List
{
get { return this[0] as CollapsingRecordNodeItemList; }
}
класс, содержащий этот метод, не является списком или чем-то итерационным, так что именно делает this[0] в смысле?
4 ответов:
искать индексатор в классе.
C# позволяет определить индексаторы, чтобы разрешить этот вид доступа.
вот пример из официального руководства для "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; } }вот определение от спецификация официального языка:
An индексатор является членом, который позволяет индексировать объекты так же, как массив. Индексатор объявляется как a свойство за исключением того, что имя элемента это следует список параметров, записанных между разделителями [ и ]. Параметры доступны в методах доступа индексатора. Как и свойства, индексаторы могут быть доступны только для чтения и записи, а методы доступа к индексатору могут быть виртуальными.
можно найти полное определение в разделе 10.9 индексаторы спецификации.
это означает, что тип объявления (или базовый класс этого) имеет "индексатор", который предположительно принимает
int(или аналогичный) и возвращает... что-то (возможно,object?). Код вызывает индексаторgetдоступа, передав0как индекс - а затем обрабатывает возвращаемое значение какCollapsingRecordNodeItemList(илиnullвозвращаемое значение не совместимо с этим).например:
public object this[int index] { get { return someOtherList[index]; } }самое простое, что можно сделать, это шаг в него, хотя. Это вам подскажет ровно куда он идет.
предполагая, что сам класс наследует от некоторой формы, если
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 }
это значит вызвать
itemсвойстваgetметод этого класса. Это называется класс индексатор
Comments