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

7.5.1Списки аргументов

Каждый вызов функции-члена и делегата включает список аргументов, в котором передаются фактические параметры или ссылки на переменные для параметров функции-члена. Синтаксис записи списка аргументов при вызове функции-члена зависит от категории функции-члена.

  • Для конструкторов экземпляров, методов, индексаторов и делегатов аргументы указываются в виде списка_аргументов, как показано ниже. Для индексаторов при вызове метода доступа set список аргументов дополнительно включает выражение, указанное в качестве правого операнда оператора присваивания.

  • Для свойств список аргументов пуст при вызове метода доступа get и содержит выражение, указанное в качестве правого операнда оператора присваивания, при вызове метода доступа set.

  • Для событий список аргументов состоит из выражения, указанного в качестве правого операнда оператора += или -=.

  • В пользовательских операторах список аргументов состоит из одного операнда для унарного оператора и из двух операторов для бинарного оператора.

Аргументы свойств (§10.7), событий (§10.8) и пользовательских операторов (§10.10) всегда передаются как параметры значений (§10.6.1.1). Аргументы индексаторов (§10.9) всегда передаются как параметры значений (§10.6.1.1) или массивы параметров (§Error: Reference source not found). Для этих категорий функций-членов параметры ссылки и параметры вывода не поддерживаются.

Аргументы при вызове конструктора экземпляра, метода, индексатора или делегата указываются в виде списка_аргументов:

список_аргументов: аргумент список_аргументов , аргумент

аргумент: имя_аргументанеобязательно значение_аргумента

Пример: имя идентификатора

значение_аргумента: выражение ref ссылочная_переменная out ссылочная_переменная

Список_аргументов содержит один или несколько аргументов, разделенных запятыми. Каждый аргумент состоит из необязательного имени_аргумента, за которым следует значение_аргумента. На аргумент с именем_аргумента ссылаются, как на именованный аргумент, в то время, как аргумент без имени_аргумента является позиционным аргументом. Для позиционного аргумента является его местонахождение после именованного аргумента в списке_аргументов

Значение_аргумента может иметь одну из следующих форм.

  • Выражение, указывающее, что аргумент передается в виде параметра значения (§10.6.1.1).

  • Ключевое слово ref, за которым следует ссылка_на_переменную (§5.4), указывающее, что аргумент передается в виде параметра ссылки (§10.6.1.2). Чтобы переменную можно было передавать в виде параметра ссылки, она должна быть явно присвоена (§5.3). Ключевое слово out, за которым следует ссылка_на_переменную (§5.4), указывающее, что аргумент передается в виде параметра вывода (§10.6.1.3). После вызова функции-члена, в котором переменная передается в виде параметра вывода, переменная считается явно присвоенной (§5.3).

7.5.1.1Соответствующие параметры

Для каждого аргумента в списке аргументов внутри члена функции или вызываемого делегата должен присутствовать соответствующий параметр.

Список параметров, использующийся в следующих случаях, определяется следующим образом:

  • Для виртуальных методов, а также индексаторов, определенных в классах, список параметров выбирается из наиболее подходящего объявления или переопределения члена функции, начиная со статического типа получателя и выполняя поиск через его базовые классы.

  • Для методов и индексаторов интерфейса список параметров выбирается из наиболее подходящего определения члена, начиная с типа интерфейса и выполняя поиск через базовые интерфейсы. Если список уникальных параметров не найден, создается список параметров с недоступными именами и без необязательных параметров; таким образом, при вызовах не смогут использоваться именованные параметры и пропускаться необязательные аргументы.

  • Для разделяемых методов используется список параметров определяющего объявления разделяемого метода.

  • Для всех остальных членов функций и делегатов существует только один список параметров, который и используется.

Положение аргумента или параметра определяется как число аргументов или параметров, предшествующих ему в списке аргументов или списке параметров.

Соответствующие параметры для аргументов членов функции устанавливаются следующим образом:

  • Аргументы в списке_аргументов конструкторов экземпляров, методов, индексаторов и делегатов:

  • Позиционный аргумент, в котором фиксированный параметр встречается в той же позиции, что и в списке параметров, соответствует этому параметру.

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

  • Позиционный аргумент члена функции, в котором массив параметров вызван в расширенной форме, а в соответствующей ему позиции в списке параметров нет фиксированного параметра, соответствует элементу в массиве параметров.

  • Именованный аргумент соответствует параметру с тем же именем в списке параметров.

  • Для индексаторов, при вызове метода доступа set выражение, указанное как правый операнд оператора назначения, соответствует неявному параметру value объявления метода доступа set.

  • Для свойств при вызове метода доступа get аргументов нет. При вызове метода доступа set выражение, указанное как правый операнд оператора назначения, соответствует неявному параметру value объявления метода доступа set.

  • Для пользовательских унарных операторов (включая преобразования) один операнд соответствует одному параметру объявления оператора.

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

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