ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 11.12.2025
Просмотров: 3188
Скачиваний: 1
Иногда, когда ошибка не фатальна, достаточно просто поставить пользова теля в известность о происшедшем. Например, вы не смогли открыть указан ный пользователем файл. Пользователь может быть раздражен и огорчен этим фактом, но, по крайней мере, он сможет продолжить свою работу.
Иногда вы не можете сделать ничего. В этом случае вам остается развести ру ками, сообщить об этом пользователю и по возможности грациозно завершить ра боту программы.
Обычно это сводится к выводу красивого, соболезнующего, но информативного сообщения об ошибке и завершению программы. Если возможно, предложите пользователю варианты его действий по исправлению ситуации.
Следующий пользовательский класс может сохранить дополнительную информацию, что невозможно в процессе применения стандартных объектов Exception или Appli cationException:
//MyException - к стандартному классу исключения добавлена
//ссылка на MyClass
public class MyException : ApplicationException
{
private MyClass myobject;
MyException(string sMsg, MyClass mo) : base(sMsg)
{
myobject = mo;
}
//Позволяет внешним классам обращаться к сохраненному
//в исключении классу
public MyClass MyObject{ get {return myobject;}}
Вернемся вновь к библиотеке функций BrilliantLibrary. Эти функции знают, как заполнять и считывать новые члены класса MyException, тем самым предоставляя информацию, необходимую для отслеживания каждой ошибки. Проблема при таком подходе заключается в том, что только функции BrilliantLibrary могут получить все преимущества от использования новых членов MyException.
Перекрытие методов, имеющихся у классов Exception или Applica tionException, может предоставить функциям вне BrilliantLi brary доступ к новым данным. Рассмотрим класс исключения из следую щей демонстрационной программы CustomException.
//CustomException - создание пользовательского исключения,
//которое выводит информацию в более дружественном формате using System;
namespace CustomException
{ |
|
|
|
public |
class CustomException : ApplicationException |
|
|
{ |
|
|
|
private |
MathClass mathobject; |
|
|
private |
string sMessage; |
|
|
Глава 18. |
Эти исключительные исключения |
413 |
|
public CustomException(string sMsg, MathClass mo)
{ |
|
|
|
|
|
mathobject |
= mo; |
|
|
|
|
sMessage = |
sMsg; |
|
|
|
|
} |
|
|
|
|
|
override |
public string |
Message |
|
|
|
{ |
|
|
|
|
|
get{return |
String.Format("Сообщение |
< { o |
} > , |
||
|
|
|
Объект {l}", |
|
|
|
|
|
sMessage, |
|
|
|
|
|
mathobj ect.ToString());} |
||
override |
public string |
ToString() |
|
|
|
{ |
|
|
|
|
|
string |
s = |
Message; |
|
|
|
s += "\пИсключение сгенерировано в |
"; |
|
|||
s += TargetSite.ToString(); // Информация |
о методе, |
||||
|
|
|
// сгенерировавшем |
исключение |
|
return |
s; |
|
|
|
|
}
}
// MathClass - набор созданных мною математических функций public class MathClass
{
private |
int nValueOfObject; |
||
private |
string sObjectDescription; |
||
public |
MathClass(string sDescription, int nValue) |
||
{ |
|
|
|
nValueOfObject |
= nValue; |
||
sObjectDescription = |
sDescription; |
||
public |
int Value |
{get |
{return nValueOfObject;}} |
//Message - вывод сообщения со значением
//присоединенного объекта MathClass public string Message
{
get
{
return String.Format("({0} = {l})",
sObj ectDescription, nValueOfObject);
}
}
//ToString - расширение нашего пользовательского
//свойства Message с использованием Message из базового
//класса исключения
override |
public string |
ToString() |
{ |
|
|
string s = Message + |
"\n"; |
|
s +- base.ToString(); |
||
return |
s; |
|
}
// Вычисление обратного значения 1/x
public double |
Inverse() |
414 |
Часть VII. Дополнительные глава |