Методы и модификаторы параметров в C#
Оформленная подпрограмма имеет вид:
<доступ> <тип> (<список параметров>)
{
<операторы>
}
Например, подпрограмма функция
public int get_num()
{
return Prod_Num;
}
Обычная подпрограмма
public void SwapStr (ref string s1, ref string s2)
{
string temp = s1;
s1 = s2;
s2 = temp;
}
Подпрограмма может возвращать вычисленное значение через свое имя, тогда перед именем подпрограммы записывается возвращаемое значение, а внутри подпрограммы имеется оператор return. Если подпрограмма не возвращает таким способом значение, то тип возвращаемого значения void.
Параметры, передаваемые в подпрограмму, могут передаваться по значению или по ссылке. При передаче по значению значение параметра копируется в память подпрограммы. Если это параметр в подпрограмме будет изменен, то его значение, которое было при вызове, не изменится. При передаче параметра по ссылке, либо вычисленное значение возвращается из подпрограммы, либо вообще обработка выполняется в памяти вызывающей программы (таким способом обычно обрабатываются массивы). Для управления этими режимами обработки применяются модификаторы, которые записываются перед именем подпрограммы.
Если никакой модификатор перед параметром не записан (или записан модификатор in), предполагается передача по значению.
Модификатор out указывает, что параметр передается по ссылке. Другими словами, в подпрограмме будет вычислено значение параметра и передано в вызывающую программу. Если в подпрограмме значение этому параметру не будет присвоено, компилятор выдаст сообщение об ошибке на стадии компиляции программы.
Модификатор ref указывает, что обработка будет выполняться в памяти вызывающей программы. Если объекту, на который ссылается параметр, память не выделена, то будет выдано сообщение об ошибке на стадии компиляции программы. Если в подпрограмме значение этому параметру не будет присвоено, компилятор сообщение об ошибке не выдаст.
Модификатор params указывает, что в подпрограмму передается список значений, разделенных запятыми. Ниже приведен пример.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace avrg_params
{
class Program
{
static double Calculateavrg(params double [ ] values)
{
// Вывод количества значений
Console.WriteLine ("В подпрограмму передано {0} чисел",values.Length);
double sum = 0;
if(values.Length == 0) return sum;
for (int i = 0; i < values.Length; i++)
sum += values [i];
return (sum / values.Length);
}
static void Main(string[] args)
{
Console.WriteLine ("Проверка модификатора params");
double avrg;
// Передача списка значений double
avrg = Calculateavrg(7.0, 8.2, 5.7, 4.2, 9.3, 1.8);
Console.WriteLine("Среднее значение = {0:f2}
", avrg);
// Передача списка с помощью массива по имени list
double [ ] list = { 4.0, 3.2, 5.7, 2.9 };
avrg = Calculateavrg(list);
Console.WriteLine("Среднее значение = {0:E2}
", avrg);
// Значения не переданы
avrg = Calculateavrg();
Console.WriteLine("Среднее значение = {0:G}", avrg);
Console.ReadKey();// Останов экрана
}
}
}
Результат вывода программы
Модификатор params в списке параметров может быть только один и должен записываться последним.
Методы и модификаторы параметров в C#
Лекции по предмету «Программирование»