Практически то же самое, что и в Java - вы расширяете класс Exception
.
В самой простой форме.
public class CustomException : System.Exception
{
public CustomException()
{
}
public CustomException(string message)
: base(message)
{
}
public CustomException(string message, System.Exception innerException)
: base(message, innerException)
{
}
}
К этому затем добавьте данные, которые вы хотите захватить, используя поля или свойства.
Из интереса, прежде чем ответить на этот вопрос, я проверил Microsoft Design Guildlines на пользовательские исключения. Разработка пользовательских исключений (MSDN)
- Избегайте глубоких иерархий пространства имен.
- Если возможно, извлекайте из одного предоставленного общего базового исключения, то есть
ArgumentException
. ОДНАКО Не выводите из ApplicationException
.Это не вредно, это бессмысленно. MSDN Blog Post на ApplicationException . - Используйте суффикс «Exception».
- Сделайте исключения сериализуемыми с помощью интерфейса
ISerializable
.Очевидно, что исключение должно быть сериализуемым, чтобы правильно работать в домене приложения и удаленных границах. - Храните конфиденциальную информацию о безопасности в частном состоянии исключения, добавьте атрибут SecurityPermission, чтобы гарантировать, что информация может получить только доверенный код.
I весьма рекомендуем прочитать Руководство по проектированию в MSDN.