Параметры методов, если таковые имеются, определяются посредством списка формальных параметров.
formal-parameter-list:
formal-parameters
formal-parameters:
fixed-parameters
fixed-parameters ; parameter-array
parameter-array
fixed-parameters:
fixed-parameter-block
fixed-parameters ; fixed-parameter-block
fixed-parameter-block:
attributesopt parameter-modifieropt parameter-list : type
parameter-list:
identifier
parameter-list , identifier
parameter-modifier:
Var
Out
parameter-array:
attributesopt ParamArray identifier : array-type
Список формальных параметров состоит из описаний параметров из которых только последний может быть параметром-массивом.
Определение метода создает новое пространство определений для параметров и локальных переменных.
При вызове метода создается отдельная для данного вызова копия формальных параметров и локальных переменных метода. Формальные параметры означиваются фактическими значениями, указанными в списке аргументов при вызове метода. Внутри тела метода его параметры могут использоваться непосредственно путем указания их имен при этом используется нотация простого имени.
Существует четыре вида формальных параметров:
Параметры, передаваемые по значению. Параметр, определенный без модификаторов, является параметром передаваемым по значению. Параметр, передаваемый по значению, соответствует локальной переменной которая получает свое начальное значение из соответствующего аргумента, переданного при вызове метода. Аргумент, передаваемый в качестве значения параметра передаваемого по значению, должен иметь тип который может быть неявным образом приведен к типу параметра. Допустимо в теле метода присваивать новые значения параметру, передаваемому по значению. Данные изменения носят локальный характер и не влияют на аргумент переданный в вызове метода.
Параметры, передаваемые по ссылке. Параметр, объявленный с модификатором Var, является параметром, передаваемым по ссылке. Параметр, передаваемый по ссылке, не создает новой ячейки памяти. Вместо этого он представляет место в памяти выделенное для хранения переменной, которая была передана в качестве аргумента при вызове метода. Аргумент, передаваемый в качестве значения ссылочного параметра, должен быть переменной того же типа, что и тип параметра.
Выходные параметры. Параметр, объявленный с модификатором Out, является выходным параметром. Аналогично параметрам, передаваемым по ссылке, выходной параметр не создает новой ячейки памяти. Вместо этого он представляет место в памяти выделенное для хранения переменной, которая была передана в качестве аргумента при вызове метода. Аргумент, передаваемый в качестве значения выходного параметра, должен быть переменной того же типа, что и тип параметра. Значение выходного параметра изначально не определено. Оно должно быть определено до возврата из функции.
Параметры-массивы. Параметр, объявленный с модификатором ParamArray, является параметром-массивом и позволяет определить метод с переменным количеством параметров. Параметр такого вида обязательно должен быть последним в списке параметров метода, а также тип его должен быть одномерным массивом. Передача аргументов методу с переменным количеством параметров может производиться одним из следующих способов:
В качестве аргумента может быть передано значение выражения тип которого может быть неявным образом приведен к типу параметра-массива.
В качестве аргумента может быть передано ноль или более значений, каждое из которых имеет тип неявно приводимый к типу элементов массива. В этом случае при вызове метода создается экземпляр массива, содержащий переданные в качестве аргументов значения, и используется в качестве значения параметра.
За исключением возможности передачи переменного количества аргументов параметры-массивы ничем не отличаются от параметров, передаваемых по значению.
Class MethodParams
//Параметр i передается по значению
//Параметр j передается по ссылке
Public Sub A(i: integer; Var j: integer);
Begin
End Sub;
//Выходной параметр i
Public Sub B(Out i: integer);
Var
Result: integer;
Begin
//Код процедуры
i := Result;
End Sub;
//Параметр-массив Arr
Public Sub C(Paramarray Arr: array Of double);
Begin
End Sub;
End Class;
Sub Test();
Var
Obj: MethodParams = New MethodParams();
Result: integer;
Arr: array Of double = New double[3];
Begin
Obj.A(1, Var Result);
Obj.B(Out Result);
Arr[0] := 1;
Arr[1] := 2;
Arr[2] := 3;
Obj.C(Arr);
End Sub;
См. также: