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

10.6.1Параметры метода

Параметры метода, если они имеются, объявляются списком_формальных_параметров метода.

список_формальных_параметров: фиксированные_параметры фиксированные_параметры , массив_параметров массив_параметров

фиксированные_параметры: фиксированный_параметр фиксированные_параметры , фиксированный_параметр

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

аргумент_по_умолчанию: = выражение

модификатор_параметра: ref out this

массив_параметров: атрибутынеобязательно params тип_массива идентификатор

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

Фиксированный_параметр состоит из необязательного набора атрибутов (§17), необязательного модификатора ref, out или this, типа, идентификатора и необязательного аргумента_по_умолчанию. Каждый фиксированный_параметр объявляет параметр данного типа с данным именем. Модификатор this определяет метод как метод расширения и допускается только в первом параметре статического метода. Методы расширения описаны далее в §10.6.9.

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

Параметры ref и out не могут иметь аргумента_по_умолчанию. Выражением в аргументе_по_умолчанию должно быть одно из следующих:

  • константное_выражение;

  • выражение вида new S(), где S является типом значения;

  • выражение вида default(S), где S является типом значения.

Выражение должно неявно преобразовываться идентификацией преобразования, которое может иметь значение null, в тип параметра.

Если необязательные параметры встречаются в определяющем объявлении разделяемого метода (§10.2.7), в явной реализации интерфейса члена интерфейса (§13.4.1) или в объявлении индексатора единственного параметра (§10.9), компилятор должен создать предупреждение, поскольку эти члены никогда не могут вызываться способом, в котором аргументы могут отсутствовать.

Массив_параметров состоит из необязательного набора атрибутов (§17), модификатора params, типа_массива и идентификатора. Массив параметров объявляет единственный параметр заданного типа массива с данным именем. Тип_массива массива параметров должен быть типом одномерного массива (§12.1). При вызове метода массив параметров допускает указание либо одного аргумента с данным типом массива, либо ноль или более аргументов типа элемента массива. Параметры массивов описаны далее в §Error: Reference source not found.

Массив_параметров может присутствовать после необязательного параметра, но не может иметь значение по умолчанию – отсутствие аргументов для массива_параметров приведет вместо этого к созданию пустого массива.

В двух следующих примерах демонстрируются разные виды параметров.

public void M( ref int i, decimal d, bool b = false, bool? n = false, string s = "Hello", object o = null, T t = default(T), params int[] a ) { }

В списке_формальных_параметров для M, i является обязательным параметром, d является обязательным параметром по значению, b, s, o и t являются необязательными параметрами по значению, и a является массивом параметров.

Объявление метода создает отдельную область объявлений для параметров, параметров типов и локальных переменных. Имена вводятся в эту область объявлений списком параметров типов и списком формальных параметров метода, и объявлениями локальных переменных в блоке метода. Одно и то же имя для двух членов области объявлений метода является ошибкой. Содержание элементов с одним и тем же именем в области объявлений метода и в области объявлений локальных переменных вложенной области объявлений является ошибкой.

Вызов метода (§7.6.5.1) создает определенную для этого вызова копию формальных параметров и локальных переменных метода, а список аргументов вызова присваивает значения или ссылки на переменные вновь созданным формальным параметрам. Внутри блока метода к формальным параметрам можно обращаться по их идентификаторам в выражениях простого_имени (§7.6.2).

Есть четыре вида формальных параметров:

  • параметры по значению, объявляемые без модификаторов;

  • параметры по ссылке, объявляемые с модификатором ref;

  • выходные параметры, объявляемые с модификатором out;

  • массивы параметров, объявляемые с модификатором params.

Как описано в §3.6, модификаторы ref и out являются частью подписи метода, а модификатор params – нет.

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