Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по ООП (язык C#).pdf
Скачиваний:
190
Добавлен:
16.05.2015
Размер:
1.54 Mб
Скачать

Чернов Э. А.

- 28 -

Лекции по языку C# v 2.3

{

Console.WriteLine(" Обработка окончена");

 

 

 

}

Console.ReadKey();

}

}

}

Примеры вывода программы

Введено положительное число, но пустая строка

Введено положительное число и не пустая строка

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

Методы и модификаторы параметров

Оформленная подпрограмма имеет вид: <доступ> <тип> (<список параметров>)

{

<операторы>

}

Например, подпрограмма функция public int get_num()

{

return Prod_Num;

}

Обычная подпрограмма

public void SwapStr (ref string s1, ref string s2)

{

string temp = s1; s1 = s2;

s2 = temp;

}

Чернов Э. А.

- 29 -

Лекции по языку C# v 2.3

Подпрограмма может возвращать вычисленное значение через свое имя, тогда перед именем подпрограммы записывается возвращаемое значение, а внутри подпрограммы имеется оператор 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;

Чернов Э. А.

- 30 -

Лекции по языку C# v 2.3

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}\n", avrg);

//Передача списка с помощью массива по имени list double [ ] list = { 4.0, 3.2, 5.7, 2.9 };

avrg = Calculateavrg(list);

Console.WriteLine("Среднее значение = {0:E2}\n", avrg);

//Значения не переданы

avrg = Calculateavrg();

Console.WriteLine("Среднее значение = {0:G}", avrg); Console.ReadKey();// Останов экрана

}

}

}

Результат вывода программы

Модификатор params в списке параметров может быть только один и должен записываться последним.

Неявно типизированные переменные

В языке C# можно не указывать явно тип переменной. Для этого применяется ключевое слово var. Для переменной, объявленной с помощью ключевого слова var, тип устанавливает компилятор при первом присвоении значения или при создании объекта. Переменные, объявленные с помощью ключевого слова var, называются неявно типизированными.

IENumerable?

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