Пользовательские классы исключений

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

У последнего примера имеется недостаток — вызывающая сторона не может определить причину исключения при вызове DoAverage() на основании одного типа исключения. Чтобы узнать, что исключение произошло из-за нулевого значения переменной count, в тексте сообщения приходится искать строку "Count is zero".

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

using System;

public class CountIsZeroException: Exception

{

public CountIsZeroException()

{

}

public CountIsZeroException(string message)

: base(message)

{

}

public CountIsZeroException(string message, Exception inner)

: base(message, inner)

{

}

}

public class Summer

{

int sum = 0;

int count = 0;

float average;

public void DoAverage()

{

if (count == 0)

throw(new CountIsZeroException("Zero count in DoAverage"));

else

average = sum / count;

}

}

class Test

{

public static void Main()

{

Summer summer = new Summer();

try

{

summer.DoAverage();

}

catch (CountIsZeroException e)

{

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

}

}

}

Теперь функция DoAverage() определяет, произойдет ли исключение (равна ли нулю переменная count), и если условие выполняется — создает исключение CountIsZeroException и инициирует его.

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

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