Разработка настраиваемых исключений
Следующие рекомендации помогут обеспечить правильность разработки настраиваемых исключений.
Избегайте слишком глубокой иерархии исключений.
Дополнительные сведения см. в разделе Типы и пространства имен.
Создавайте производные исключения от исключения "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.
}
}
public ref class NewException : BaseException, ISerializable
{
public:
NewException()
{
// Add implementation.
}
NewException(String^ message)
{
// Add implementation.
}
NewException(String^ message, Exception^ inner)
{
// Add implementation.
}
protected:
// This constructor is needed for serialization.
NewException(SerializationInfo info, StreamingContext context)
{
// Add implementation.
}
};
Передавайте конфиденциальные сведения через переопределенный метод System.Object.ToString только после запроса соответствующих разрешений. Если запрос на предоставление разрешений завершился неудачей, возвращайте строку, не содержащую конфиденциальные сведения.
Храните конфиденциальные сведения в частном исключении. Предусмотрите, чтобы только надежный код мог получать эти сведения.
Рекомендуется устанавливать свойства исключения для программного доступа к дополнительным сведениям (помимо строки сообщения), имеющим отношение к исключению.
Фрагменты — © Корпорация Майкрософт (Microsoft Corp.), 2005. Все права защищены.
Фрагменты — © Addison-Wesley Corporation. Все права защищены.
Для дополнительной информации о разработке руководящих принципов, смотрите "руководства по разработке рамок: Конвенций, идиомы и шаблоны для повторного использования.NET библиотек"книга, Кшиштоф Cwalina и Брэд Абрамс, опубликованных Addison-Wesley, 2005 года.
См. также
Основные понятия
Выбор правильного типа создаваемого исключения