2012-03-05 7 views
1

Я не получаю ключевое слово throw, зачем его использовать? Каковы преимущества этого?C# зачем бросать ошибки

В настоящее время у меня есть это в моем классе UI:

try 
{ 
    Classreference.MethodToRun(); 
} 
catch (Exception ex) 
{ 
    MessageBox.Show(ex.ToString(), "Message", MessageBoxButtons.OK, MessageBoxIcon.Error); 
} 

Это работает, но я думаю, с throw я мог бы сделать метод, который я звоню бросить ошибку вместо того, чтобы и поймать его в моем классе UI ? Но почему? Что лучше? Это сделано, чтобы сделать классы более объектно-ориентированными или что? Я предполагаю, что если я просто поймаю ошибку в моем классе пользовательского интерфейса, мне не нужно будет менять код, если я изменю метод, который я вызываю, но вместо этого изменим сообщение об ошибке в изменяющемся методе?

+2

Google «Превосходные практики обработки исключений с использованием C#» и читайте каждую статью, которую вы, возможно, можете. – asawyer

+0

Gah! Остановите людей безумного праздника! Это реальный вопрос ... с некоторым кодом в нем. Здесь есть реальные полезные ответы. – Josh

+0

@Josh - посмотрите историю изменений. Вопрос был непонятен для начала. – Oded

ответ

1

Вы используете throw, чтобы указать, что произошла ошибка или передать существующую ошибку на более высокий уровень.

Вы используете catch, когда хотите обработать ошибку (исключение).

Бросок исключения - это улучшение по сравнению с более старым процедурным способом обработки ошибок, в котором вы возвращаете коды ошибок.

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

+0

Это было именно то, что я искал, короткое и точное. Благодарю. – Gvs

0

Ключевое слово throw можно использовать для исключения исключения из метода выше.

Используя этот способ, вы можете более эффективно использовать исключение, например, закрыть доступ к базе данных или что-то в этом роде.

0

Что вы здесь делаете, это эффективно маскирование большого количества информации, которую вы могли бы получить из исключения. то, что вы регулярно хотите сделать, это поймать исключение, зарегистрировать соответствующую информацию в каком-либо месте, где вы можете просмотреть его (logfile, db, eventlog), а затем либо throw(), который сохранит вашу трассировку стека, либо выбросит другую " удобное для пользователя "исключение, которое маскирует техническую реализацию.

0

asawyer прав, вам нужно google и читать при обработке ошибок, это широкий вопрос, и вы только на самом деле «получите его» после практики, разговоров и чтения об этом. throw - это то, что вам, вероятно, не нужно будет использовать слишком часто, но вы можете иногда использовать его, чтобы остановить нежелательное поведение и создать более ясные ошибки для программистов, использующих ваши методы. Я знаю, что это довольно надуманный, но взять этот пример:

public string WriteToFile(FileStream fs) { 
    if (fs == null) { 
    throw new ApplicationException("you passed a null filestream"); 
    } 

    // write to file 
} 

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