Блок finally

April 7, 2010 by admin Комментировать »

Иногда перед завершением функции требуется выполнить некоторые завершающие действия (например, закрыть файл). При обработке исключений эти завершающие действия пропускаются:

using System;

using System.IO;

class Processor

{

int count;

int sum;

public int average;

void CalculateAverage(int countAdd, int sumAdd)

{

count += countAdd;

sum += sumAdd;

average = sum / count;

}

public void ProcessFile()

{

FileStream f = new FileStream("data.txt", FileMode.Open);

try

{

StreamReader t = new StreamReader(f);

string line;

while ((line = t.ReadLine()) != null)

{

int count;

int sum;

count = Int32.FromString(line);

line = t.ReadLine();

sum = Int32.FromString(line);

CalculateAverage(count, sum);

}

f.Close();

}

// Блок finally всегда выполняется перед выходом

// из функции, даже если в блоке try произошло исключение.

finally

{

f.Close();

}

}

}

class Test

{

public static void Main()

{

Processor processor = new Processor();

try

{

processor.ProcessFile();

}

catch (Exception e)

{

Console.WriteLine("Exception: {0}", e);

}

}

}

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

В этом случае деление в CalculateAverage() инициирует исключение DivideByZeroException, что приводит к выходу из цикла чтения файла. Если бы программист написал функцию, не учитывая возможности исключений, вызов file.Close() был бы пропущен, и файл остался бы открытым.

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

Ты еще на торгуешь на Форекс/Forex!? прогнозы forex MegaTrade – пора Зарабатывать!

Оставить комментарий

микросхемы мощности Устройство импульсов питания пример приемника провода витков генератора выходе напряжение напряжения нагрузки радоэлектроника работы сигнал сигнала сигналов управления сопротивление усилитель усилителя усиления устройства схема теория транзистора транзисторов частоты