Функциональные члены - это члены, содержащие исполняемый код. Язык определяет следующие категории функциональных членов:
За исключением статических конструкторов операторы, содержащиеся в функциональных членах, выполняются в результате вызова этих членов. Синтаксис вызова функционального члена зависит от его категории. Перечень аргументов в вызове функционального члена содержит действительные значения или ссылки на переменные соответствующие параметрам функционального члена.
При вызове методов, свойств и экземплярных конструкторов производится разрешение перегруженных имен для определения определенного члена из перечня кандидатов, который будет вызван в результате. Этот процесс описан в §7.4.2
В разделе §7.4.2.1 описан процесс вызова функционального члена во время выполнения.
Каждый вызов функционального члена содержит перечень аргументов, который определяет действительные значения или ссылки на переменные соответствующие параметрам функционального члена. Синтаксис для указания перечня аргументов зависит от категории функционального члена:
Для экземплярных конструкторов, методов и делегатов аргументы указываются в виде перечня аргументов как описано ниже.
Для простых свойств перечень аргументов является пустым при вызове метода чтения значения свойства и состоит из выражения, указанного в правой части оператора присваивания при вызове метода установки значения свойства.
Для индексированных свойств перечень аргументов состоит из выражений, указанных между квадратными скобками в операции доступа к члену. При вызове метода установки значения свойства перечень аргументов дополнительно содержит выражение, указанное в правой части оператора присваивания.
Аргументы для простых свойств и событий всегда передаются как параметры, передаваемые по значению. Аргументы индексированных свойств также передаются либо как параметры, передаваемые по значению, либо как параметры-массивы. Параметры, передаваемые по ссылке, либо выходные параметры не поддерживаются для указанных категорий функциональных членов. Типы параметров и их различия описаны в разделе Методы: Параметры методов.
Аргументы для конструкторов, методов и делегатов аргументы указываются в виде перечня аргументов:
argument-list:
( argumentsopt )
arguments:
argument
arguments , argument
argument:
expression
Var variable-reference
Out variable-reference
variable-reference:
expression
Перечень аргументов состоит из одного или более аргументов, разделенных запятыми. Каждый аргумент может принимать одну из следующих форм:
Выражение, означающее что аргумент передается как параметр, передаваемый по значению.
Ключевое слово Var с последующей ссылкой на переменную, означающее что аргумент передается как параметр, передаваемый по ссылке.
Ключевое слово Out с последующей ссылкой на переменную, означающее что аргумент передается как выходной параметр.
При обработке вызова функционального члена во время выполнения программы выражения или ссылки на переменные в перечне аргументов вычисляются в порядке слева направо следующим образом:
Для параметра, передаваемого по значению, производится вычисление указанного выражения и неявное преобразование используется для приведения вычисленного значения к типу соответствующего параметра. Полученное значение становится начальным значением параметра в вызове функционального члена.
Для параметров, передаваемых по ссылке, и выходных параметров переданная ссылка на переменную вычисляется и полученный указатель на ячейку памяти становится значением, которое представляет соответствующая переменная.
Методы, индексированные свойства и экземплярные конструкторы могут иметь переменное количество параметров. Такие функциональные члены могут быть вызваны как в нормальной, так и расширенной форме в зависимости от того, какая из них окажется подходящей:
Когда функциональный член вызывается в нормальной форме аргумент передаваемый в качестве значения параметра-массива должен быть единичным выражением, тип которого может быть неявно приведен к типу параметра-массива. В этом случае данный параметр действует также как и обычный параметр, передаваемый по значению.
Когда функциональный член вызывается в расширенной форме, вызов должен содержать ноль или более аргументов каждый из которых может быть неявным образом приведен к типу элементов параметра-массива. В этом случае при вызове создается экземпляр массива с длиной, соответствующей количеству таких аргументов и элементы массива инициализируются значениями аргументов. Созданный экземпляр массива используется в качестве значения параметра.
См.также: