Мегаобучалка Главная | О нас | Обратная связь


Список формальных аргументов



2016-09-17 355 Обсуждений (0)
Список формальных аргументов 0.00 из 5.00 0 оценок




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

Рассмотрим теперь синтаксис объявления формального аргумента:

[ref|out|params]тип_аргумента имя_аргумента

 

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

Несмотря на фиксированное число формальных аргументов, есть возможность при вызове метода передавать ему произвольное число фактических аргументов. Для реализации этой возможности в списке формальных аргументов необходимо задать ключевое слово params. Оно задается один раз и указывается только для последнего аргумента списка, объявляемого как массив произвольного типа. При вызове метода этому формальному аргументу соответствует произвольное число фактических аргументов.

Содержательно, все аргументы метода разделяются на три группы: входные, выходные и обновляемые. Аргументы первой группы передают информацию методу, их значения в теле метода только читаются. Аргументы второй группы представляют собой результаты метода, они получают значения в ходе работы метода. Аргументы третьей группы выполняют обе функции. Их значения используются в ходе вычислений и обновляются в результате работы метода. Выходные аргументы всегда должны сопровождаться ключевым словом out, обновляемые - ref. Что же касается входных аргументов, то, как правило, они задаются без ключевого слова, хотя иногда их полезно объявлять с параметром ref, о чем подробнее скажу чуть позже. Заметьте, если аргумент объявлен как выходной с ключевым словом out, то в теле метода обязательно должен присутствовать оператор присваивания, задающий значение этому аргументу. В противном случае возникает ошибка еще на этапе компиляции.

Для иллюстрации давайте рассмотрим группу методов класса Testing из проекта ProcAndFun, сопровождающего эту лекцию:

/// <summary>

/// Группа перегруженных методов A()

/// первый аргумент представляет сумму кубов

/// произвольного числа оставшихся аргументов

/// Аргументы могут быть разного типа.

/// </summary>

void A(out long p2, int p1)

{

p2 =(long) Math.Pow(p1,3);

Console.WriteLine("Метод A-1");

}

void A(out long p2, params int[] p)

{

p2=0; for(int i=0; i <p.Length; i++) p2 += (long)Math.Pow(p[i],3);

Console.WriteLine("Метод A-2");

}

void A(out double p2, double p1)

{

p2 = Math.Pow(p1,3);

Console.WriteLine("Метод A-3");

}

void A(out double p2, params double[] p)

{

p2=0; for(int i=0; i <p.Length; i++) p2 += Math.Pow(p[i],3);

Console.WriteLine("Метод A-4");

}

/// <summary>

/// Функция с побочным эффектом

/// </summary>

/// <param name="a">Увеличивается на 1</param>

/// <returns>значение a на входе</returns>

int f(ref int a)

{

return(a++);

}

 

Четыре перегруженных метода с именем A и метод f будут использоваться при объяснении перегрузки и побочного эффекта. Сейчас проанализируем только их заголовки. Все методы закрыты, поскольку объявлены без модификатора доступа. Перегруженные методы с именем A являются процедурами, метод f - функцией. Все четыре перегруженных метода имеют разную сигнатуру. Хотя имена и число аргументов у всех методов одинаковы, но типы и ключевые слова, предшествующие аргументам, различны. Первый аргумент у всех четырех перегруженных методов - выходной и сопровождается ключевым словом out, в теле метода этому аргументу присваивается значение. Аргумент функции f - обновляемый, он снабжен ключевым словом ref, в теле функции используется его значение для получения результатафункции, но и само значение аргумента изменяется в теле функции. Два метода из группы перегруженных методов используют ключевое слово params для своего последнего аргумента. Позже мы увидим, что при вызове этих методов указанному аргументу будет соответствовать несколько фактических аргументов, число которых может быть произвольным.

 

 

Тело метода

Синтаксически тело метода является блоком, который представляет собой последовательность операторов и описаний переменных, заключенную в фигурные скобки. Если речь идет о теле функции, то в блокедолжен быть хотя бы один оператор перехода, возвращающий значение функции в форме return (выражение).

Оператор return описан в лекции 8.

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

Область видимости, время жизни переменных, конфликты имен рассмотрены в лекции 5, семантика операторов - в лекции 8. Дополнительные сведения о семантике выполнения метода будут даны в этой лекции.

Знания семантики описаний и операторов достаточно для понимания семантики блока. Необходимые уточнения будут даны чуть позже.



2016-09-17 355 Обсуждений (0)
Список формальных аргументов 0.00 из 5.00 0 оценок









Обсуждение в статье: Список формальных аргументов

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы...
Как выбрать специалиста по управлению гостиницей: Понятно, что управление гостиницей невозможно без специальных знаний. Соответственно, важна квалификация...
Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (355)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.005 сек.)