Что означает "this[0]" в C#?



Я просматривал какой-то код библиотеки и увидел такой метод, как:



public CollapsingRecordNodeItemList List
{
get { return this[0] as CollapsingRecordNodeItemList; }
}


класс, содержащий этот метод, не является списком или чем-то итерационным, так что именно делает this[0] в смысле?

282   4  
c#

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

    Ничего не найдено.