Определить настраиваемые классы исключений в C#

Пример Выброс стандартного исключения в C# объясняет, как бросить исключения, чтобы сообщить программе о неожиданных ошибках. Пример См. Иерархию классов исключений для в C# перечислены некоторые полезные классы исключений.

Но что, если ни один из этих классов не соответствует вашей ситуации? В этом случае вы можете определить собственный собственный класс исключений.

Выведите свой класс из System.Exception или другого разумного базового класса исключений. Дайте ему конструкторы, которые вызывают конструкторы базового класса.

Этот пример изменяет пример Разбирайте размеры файлов в КБ, МБ, ГБ и т. д. На C# , поэтому он генерирует настраиваемое исключение UnknownExtensionException, если вы вводите размер файла с неизвестным количеством, например, 1.23 EX , Следующий код показывает класс UnknownExtensionException.

// Брошено, если размер файла содержит неизвестное исключение.
public class UnknownExtensionException : FormatException
{
    public string Extension = "";
    public UnknownExtensionException() : base()
    {
    }
    public UnknownExtensionException(string extension) : base()
    {
        Extension = extension;
    }
    public UnknownExtensionException(string extension, string message)
        : base(message)
    {
        Extension = extension;
    }
    public UnknownExtensionException(string extension,
        string message, Exception inner_exception)
        : base(message, inner_exception)
    {
        Extension = extension;
    }
    public UnknownExtensionException(string extension,
        SerializationInfo info, StreamingContext context)
        : base(info, context)
    {
        Extension = extension;
    }
}

Класс начинается с определения поля Extension, которое будет содержать неизвестное расширение.

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

Вы можете решить, какие конструкторы вы хотите предоставить. Обычно настраиваемые классы исключений должны включать хотя бы один конструктор, который не принимает никаких параметров, а другой, который принимает сообщение в качестве параметра. Третий, который принимает сообщение и внутреннее исключение в качестве параметров, также является общим. Конструктор, который принимает информацию SerializationInfo и StreamingContext, позволяет десериализовать класс.

Этот пример несколько усложняет конструкторы, включив параметр extension.

Основная программа использует следующий код для демонстрации класса UnknownExtensionException.

// Преобразование размера файла в байты.
private void btnParse_Click(object sender, EventArgs e)
{
    txtBytes.Clear();
    txtCheck.Clear();

    try
    {
        double bytes = ParseFileSize(txtSize.Text, 1024);
        txtBytes.Text = bytes.ToString("N0");
        txtCheck.Text = ToFileSize(bytes);
    }
    catch (UnknownExtensionException ex)
    {
        // Сообщите пользователю, что это неправильное расширение имени файла.
        MessageBox.Show("Unrecognized extension " +
            ex.Extension + ". " +
            "You must end the file size in one of: " +
            "bytes, KB, MB, GB, TB, PB, EB, ZB, or YB.");
    }
    catch (Exception ex)
    {
        // Просто сообщите об этом пользователю.
        MessageBox.Show(ex.Message);
    }
}

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

Второй блок catch программы ищет другие исключения и, если он находит его, отображает сообщение об исключении.

В этом примере UnknownExtensionException выводится из FormatException, поэтому блок catch, который ищет FormatException, также поймает UnknownExtensionException .

Некоторые дополнительные советы:

Источник: http://csharphelper.com/blog/2017/09/define-custom-exception-classes-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector