Поделиться через


Разработка настраиваемых исключений

Обновлен: Ноябрь 2007

Следующие рекомендации помогут обеспечить правильность разработки настраиваемых исключений.

Избегайте слишком глубокой иерархии исключений.

Дополнительные сведения см. в разделе Типы и пространства имен.

Создавайте производные исключения от исключения "System.Exception" или одного из других общих базовых исключений.

Обратите внимание, что в разделе Перехват и создание исключений стандартных типов приведена рекомендация, запрещающая создавать производные настраиваемые исключения от типа ApplicationException.

Имена классов исключений завершайте суффиксом "Exception".

Соглашения о единообразном именовании упрощают изучение новых библиотек.

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

Сведения о том, как сделать тип сериализуемым, см. в разделе Serialization.

Предоставьте (по меньшей мере) следующие общие конструкторы для всех исключений. Убедитесь, что имена и типы параметров совпадают с используемыми в следующем примере кода.

Public Class NewException
    Inherits BaseException
    Implements ISerializable

    Public Sub New()
        MyBase.New()
        ' Add implementation.
    End Sub

    Public Sub New(ByVal message As String)
        MyBase.New()
        ' Add implementation.
    End Sub

    Public Sub New(ByVal message As String, ByVal inner As Exception)
        MyBase.New()
        ' Add implementation.
    End Sub

    ' This constructor is needed for serialization.
    Protected Sub New(ByVal info As SerializationInfo, ByVal context As StreamingContext)
        MyBase.New()
        ' Add implementation.
    End Sub
End Class
public class NewException : BaseException, ISerializable
{
    public NewException()
    {
        // Add implementation.
    }
    public NewException(string message)
    {
        // Add implementation.
    }
    public NewException(string message, Exception inner)
    {
        // Add implementation.
    }

    // This constructor is needed for serialization.
   protected NewException(SerializationInfo info, StreamingContext context)
   {
        // Add implementation.
   }
}

Передавайте конфиденциальные сведения через переопределенный метод System.Object.ToString только после запроса соответствующих разрешений. Если запрос на предоставление разрешений завершился неудачей, возвращайте строку, не содержащую конфиденциальные сведения.

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

Рекомендуется устанавливать свойства исключения для программного доступа к дополнительным сведениям (помимо строки сообщения), имеющим отношение к исключению.

Фрагменты — © Корпорация Майкрософт (Microsoft Corp.), 2005. Все права защищены.

Фрагменты — © Addison-Wesley Corporation. Все права защищены.

Дополнительные сведения о рекомендациях по разработке см. в книге "Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries", Krzysztof Cwalina and Brad Abrams, Addison-Wesley, 2005.

См. также

Основные понятия

Выбор правильного типа создаваемого исключения

Другие ресурсы

Руководство по разработке библиотек классов

Правила разработки исключений