Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSharp Language Specification.doc
Скачиваний:
13
Добавлен:
26.09.2019
Размер:
4.75 Mб
Скачать

7.6.6.2Доступ к индексатору

При доступе к индексатору массива основное_выражение_отличное_от_создания_массива для метода_доступа_к_элементу должно быть переменной или значением с типом класса, структуры или интерфейса, и в этом типе должен реализовываться один или несколько индексаторов, применимых в соответствии со списком_аргументов для метода_доступа_к_элементу.

Обработка времени привязки доступа к индексатору в виде P[A], где P является первичным_выражением_создания_не_массива с типом класса, структуры или интерфейса T, а A является списком_аргументов, включает следующие этапы.

  • Создается набор индексаторов, предоставляемых T. Этот набор состоит из всех индексаторов, объявленных в T или в базовом для T типе, которые не являются перегруженными объявлениями и доступны в текущем контексте (§3.5).

  • Этот набор сокращается до индексаторов, которые применимы и не скрыты другими индексаторами. К каждому индексатору S.I в наборе, где S является типом, в котором определен I, применяются следующие правила.

  • Если I не применим в соответствии со списком A (§7.5.3.1), то I удаляется из набора.

  • Если I применим в соответствии со списком A (§7.5.3.1), то все индексаторы, объявленные в базовом типе для S удаляются из набора.

  • Если I применим в соответствии со списком A (§7.5.3.1) и S имеет тип класса, отличный от object, то из набора удаляются все индексаторы, объявленные в интерфейсе.

  • Если результирующий набор индексаторов-кандидатов пуст, то применимых индексаторов нет и возникает ошибка времени привязки.

  • Лучший индексатор из набора индексаторов-кандидатов определяется с помощью правил разрешения перегрузки из раздела §7.5.3. Если определить один лучший индексатор нельзя, то метод доступа к индексатору является неоднозначным и возникает ошибка времени привязки.

  • Вычисляются выражения индекса в списке_аргументов по порядку слева направо. Результатом обработки доступа к индексатору является выражение, классифицированное как доступ к индексатору. Выражение доступа к индексатору ссылается на индексатор, определенный на предыдущем этапе, и имеет связанное выражение экземпляра P и связанный список аргументов A.

В зависимости от контекста использования доступ к индексатору задает вызов метода_доступа_get или метода_доступа_set индексатора. Если доступ к индексатору является назначением присваивания, то для назначения нового значения вызывается метод_доступа_set (§7.17.1). Во всех остальных случаях для получения текущего значения вызывается метод_доступа_get (§7.1.1).

7.6.7Доступ this

Доступ_this представляет собой зарезервированное слово this.

доступ_через_this: this

Доступ_this допустим только в блоке конструктора экземпляра, метода экземпляра или метода доступа к экземпляру. Он имеет одно из следующих значений.

  • Когда доступ this используется в основном_выражении внутри конструктора экземпляра класса, он классифицируется как значение. Типом значения является тип экземпляра (§10.3.1) класса, внутри которого происходит это использование, а значением является ссылка на создаваемый объект.

  • Когда доступ this используется в основном_выражении внутри метода экземпляра или метода доступа к экземпляру, он классифицируется как значение. Типом значения является тип экземпляра (§10.3.1) класса, внутри которого возникает это использование, а значением является ссылка на объект, для которого вызывается метод или метод доступа.

  • Когда доступ this используется в основном_выражении внутри конструктора экземпляра структуры, он классифицируется как значение. Типом значения является тип экземпляра (§10.3.1) структуры, внутри которой происходит это использование, а значением является создаваемая структура. Переменная this конструктора экземпляра структуры действует точно так же, как параметр out типа структуры, в частности, это означает, что переменная должна явно назначаться в каждом пути выполнения конструктора экземпляра.

  • Когда доступ this используется в основном_выражении внутри метода экземпляра или метода доступа к экземпляру структуры, он классифицируется как значение. Типом переменной является тип экземпляра структуры (§10.3.1), внутри которой происходит это использование.

  • Если метод или метод доступа не является итератором (§10.14), то переменная this представляет структуру, для которой был вызван метод или метод доступа, и действует точно так же, как параметр ref типа структуры.

  • Если метод или метод доступа является итератором, то переменная this представляет копию структуры, для которой был вызван метод или метод доступа, и действует точно так же, как параметр значения типа структуры.

Использование слова this в основном_выражении в контексте, отличном от указанных выше, приводит к возникновению ошибки времени компиляции. В частности, нельзя ссылаться на this в статическом методе, методе доступа к статическому свойству или в инициализаторе_переменной объявления поля.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]