2014-09-03 2 views
2

Если у меня есть Исключение, связанное только с одним классом, какой стиль лучше?Должен ли я обменивать пользовательские исключения класса в моем классе?

Когда я обернуть его в своем классе, как это:

class Class { 
    //some stuff 
    throw MyException(); 

    class MyException : Exception 
    { 
    //some stuff 
    } 
} 

Или оставить его вне класса

class Class { 
    //some stuff 
    throw MyException(); 
} 
class MyException : Exception 
    { 
    //some stuff 
    } 

Существует любое продвижение с помощью одного или другие решения? Для этого существуют какие-то кодирующие системы?

+0

Исключение, которое вы бросаете, никогда не должно быть закрытым. Это даже компилируется? – nvoigt

+0

Да, он скомпилирован, и исключенное исключение видно в том же пространстве имен. – NoNameProvided

+2

Ваш второй фрагмент недействителен (не вложенные члены не могут быть закрытыми). И .. ответ: он должен быть вне класса и 'public', иначе как клиентский код получит шанс его поймать? –

ответ

4

Какой стиль лучше?

Это вопрос дизайна (далее).

Для этого есть какие-либо кодирующие устройства?

Книга «Программирование на C# - Экзамен исх 70-483» говорит, что

Лучше всего использовать исключения, определенные в .NET Framework [за исключением, если есть] Разработчики, работающие с кодом [ что] знают об этих исключениях и могут обрабатывать их более конкретным образом, чем исходное исключение

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

Есть ли какие-либо авансы с использованием тех или иных решений?

Первый дизайн говорит класс будет обрабатывать исключение, как это было прокси, внешний код не будет знать, что произошло, но, вероятно, будет только знать о различных выходах dependig Wheter исключения было брошено или нет. Только класс, его подклассы (защищенные) и его «simblings» (внутренние) могут работать с ним.

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

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