2015-05-29 4 views
0

У меня довольно большой класс, который использует еще много классов. Он использует внешние ресурсы (база данных, файлы и т. Д.), И может произойти несколько исключений.Как обрабатывать необработанные исключения на уровне класса

As I learned, sometimes Предпочтительно использовать событие UnhandledException вместо того, чтобы размещать блоки try-catch повсюду.

Однако мой класс является лишь одним из многих других классов, и вышеупомянутые решения работают на уровне приложений.

Могу ли я как-то сузить его, чтобы уволить, только если исключение, возбужденное в этом классе, и другие необработанные исключения не попадают?

Использование АОП кажется хорошим способом, но я не уверен.

+1

Если вы обрабатываете исключение в «классе», то это не необработанное исключение. Только когда-либо добавляйте try/catch, когда вы * знаете *, как обращаться с ним * и * может осмысленно продолжать работу с программой. Оба условия редко бывают истинными. –

ответ

1

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

/// <exception cref="ArgumentOutOfRangeException">Thrown if argument is greater than the size of the array.</exception> 

Таким образом, ваше призвание классы могут быть лучше подготовлены для обработки исключений, и знаю более или менее какие возможные исключения не обрабатываются.

Другой подход заключается в том, чтобы инкапсулировать ваш код в блоки try-catch и использовать тот факт, что в первую очередь обрабатываются более конкретные исключения. Затем вы можете обрабатывать сценарии, которые вы можете разрешить программным путем, а затем поймать общий срок исключения, чтобы ваша программа оставалась стабильной, даже если базовые классы катастрофически катастрофически падают.

К сожалению, я не вижу, как вы собираетесь указывать свою вызываемую DLL, какие из исключений, которые она может бросить, обрабатываются.

+0

Спасибо за объяснение. Я намерен избегать блока try-catch, поскольку они вызывают ухудшение производительности, но, основываясь на вашем мнении, я в конечном итоге должен их использовать. Я рассмотрю АОП, возможно, они предлагают некоторый настраиваемый подход. – Nestor

+1

@Nestor Блоки Try-catch не вызывают ухудшения производительности (см. Здесь: http://stackoverflow.com/a/3480151/261050), только заброшенные исключения вызывают деградацию. Поэтому минимизируйте количество исключений, которые вы бросаете, и с вами все будет в порядке. – Maarten

+0

@Maarten Спасибо, за то, что я указал на это, я тоже это рассмотрю. – Nestor

Смежные вопросы