VB.Net Примеры пользовательских исключений? - PullRequest
4 голосов
/ 22 мая 2011

Проще говоря, мне интересно, кто-нибудь здесь может дать мне пример пользовательского исключения в VB.Net.У меня уже есть два примера, которые мне удалось найти в Интернете, но кроме этого, я не могу больше думать.Мне нужно найти как минимум 5, чтобы добавить свои заметки, а затем отправить моему учителю.

На данный момент у меня есть два: неверная информация для входа (например, неправильное имя пользователя или пароль) и кредитная карта с истекшим сроком действияИнформация о интернет-магазине.Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

29 голосов
/ 22 мая 2011

Основным требованием является добавление в ваш проект нового класса, который наследуется от встроенного класса System.Exception.Это дает вам практически все, что вам нужно бесплатно, потому что все это реализовано внутри класса System.Exception.

Единственное, что вам нужно добавить в файл класса, - это конструкторы (потому что, помните, конструкторы ненаследуется).Хотя вам не нужно определять все три стандартных конструктора, я настоятельно рекомендую вам это сделать, просто чтобы ваш интерфейс соответствовал всем классам исключений, предоставляемым .NET Framework.Это не так сложно просто определить их один раз, и рекомендуется инструментами анализа кода .

И, наконец (этот шаг забыт большинством людей, в том числе теми, кто разместил другие ответы).на этот вопрос), вам нужно сделать исключение serializable .Сделайте это, добавив SerializableAttribute к объявлению класса и добавив конструктор Protected, который используется внутри механизма сериализации.Атрибут не унаследован от System.Exception и должен быть указан явно.

Поскольку вы так мило спросили, вот полный пример, в котором реализовано все вышеперечисленное:

''' <summary>
''' The exception that is thrown when DWM composition fails or is not
''' supported on a particular platform.
''' </summary>
<Serializable()> _
Public Class DwmException : Inherits System.Exception

    ''' <summary>
    ''' Initializes a new instance of the <see cref="DwmException"/> class.
    ''' </summary>
    Public Sub New()
        MyBase.New()
    End Sub

    ''' <summary>
    ''' Initializes a new instance of the <see cref="DwmException"/> class
    ''' with the specified error message.
    ''' </summary>
    ''' <param name="message">The message that describes the error.</param>
    Public Sub New(ByVal message As String)
        MyBase.New(message)
    End Sub

    ''' <summary>
    ''' Initializes a new instance of the <see cref="DwmException"/> class
    ''' with the specified error message and a reference to the inner
    ''' exception that is the cause of this exception.
    ''' </summary>
    ''' <param name="message">The message that describes the error.</param>
    ''' <param name="innerException">The exception that is the cause of the
    ''' current exception, or a null reference if no inner exception is
    ''' specified</param>
    Public Sub New(ByVal message As String, ByVal innerException As System.Exception)
        MyBase.New(message, innerException)
    End Sub

    ' Constructor required for serialization
    <SecuritySafeCritical()> _
    Protected Sub New(ByVal info As SerializationInfo, ByVal context As StreamingContext)
        MyBase.New(info, context)
    End Sub

End Class

Ааа, после публикации вышесказанного, я понял, что, возможно, полностью неверно истолковал ваш вопрос.Я (и другие ответы) подумал, что вы спрашивали пример того, как реализовать пользовательский класс исключений.Похоже, вы просто просите привести примеры, когда вы сделали бы такое в своем проекте ... Это гораздо сложнее.

Большинство времениВы не хотите сделать это.Единственный раз, когда вы должны создать пользовательское исключение, это когда вы пишете библиотеку кода многократного использования (например, файл .DLL), и вы ожидаете, что клиентский код будет реагировать по-разному в зависимости от конкретного исключения, которое быловыброшены.Поэтому в моем случае я выбрасываю DwmException из моей библиотеки классов, потому что клиентское приложение может захотеть перехватить это исключение и отключить некоторую необычную функцию пользовательского интерфейса, когда композиция DWM не включена на компьютере пользователя.Обычно я просто выбрасываю стандартный NotSupportedException, но в этом случае я хочу предоставить клиенту возможность различать исключение, которое может обрабатывать, и исключение, которое онине может или не должен.

В стандартном приложении, где весь код самодостаточен (т. е. когда вы не создаете библиотеку кода многократного использования), вам следуетв основном никогда создает / генерирует пользовательское исключение.Бросай один из стандартных, вместо этого.Следуя вышеприведенному правилу, если вам нужно выдать пользовательское исключение, чтобы повлиять на реакцию клиентского кода, это будет признаком того, что вы используете исключения для «управления потоком» внутри вашего приложения (поскольку производитель и потребитель - это однов том же), что настоятельно не рекомендуется.

0 голосов
/ 22 мая 2011

Создайте новый класс, производный от System.Exception class. Смотрите здесь:

http://www.c -sharpcorner.com / UploadFile / Махеш / exceptionhandling06222007060938AM / exceptionhandling.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...