Разработка настраиваемых исключений
Обновлен: Ноябрь 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.
См. также
Основные понятия
Выбор правильного типа создаваемого исключения