В Visual Basic .NET можно создавать собственные типы исключений, чтобы более явно указывать на специфические ошибки, возникшие в приложении. Для этого нужно наследовать новый класс от System.Exception (или одного из его наследников) и, при необходимости, добавлять новые свойства для передачи дополнительной информации.
Custom Exceptions позволяют сделать код более читаемым и поддерживаемым, особенно если вам нужна специфичная обработка для определённых бизнес-сценариев.
Пример:
Public Class InvalidUserNameException Inherits ApplicationException Public Sub New(message As String) MyBase.New(message) End Sub End Class ' Использование: Sub ValidateUserName(userName As String) If userName = "" Then Throw New InvalidUserNameException("Имя пользователя не может быть пустым") End If End Sub
Вопрос: «Можно ли просто выбросить строку с помощью Throw "Ошибка" в Visual Basic, и обработает ли это Try...Catch?»
Ответ: Нет, так сделать нельзя. Оператор Throw требует объект типа Exception. Попытка выбросить строку (Throw "err") приведёт к ошибке компиляции. Нужно всегда создавать новый экземпляр класса Exception или его наследника.
Пример неверного кода:
' Это вызовет ошибку! Throw "Ошибка!"
Пример правильного кода:
Throw New Exception("Ошибка!")
История:
На большом проекте один из разработчиков выбрасывал исключения с помощью
Throw "Некорректные данные!". Это приводило к ошибкам компиляции на продакшене, т.к. код не прошёл статическую проверку. Отсутствие правильной обработки исключений замедлило релиз на неделю — пришлось искать и переписывать все случаи использования throw со строками по коду.
История:
Команда создавала кастомные исключения, не добавив конструктор с параметром InnerException. При диагностике сложных ошибок терялся стек вызовов из-за невозможности «вложить» оригинальное исключение. В результате было сложно найти изначальную причину возникновения сбоя.
История:
В медиа-приложении custom exception использовалась слишком часто и не по назначению (например, при каждом некорректном вводе данных). В результате производительность системы упала — ведь генерация исключений операционно затратна. После ревью часть таких исключений заменили на обычные проверки условий.