Основным преимуществом пользовательских исключений является языковая поддержка различия между различными типами исключений. Например
try
{
SomeFunc()
}
catch( CustomException EX)
{
//This is my error that I know how to fix
FixThis()
DoSomeAwesomeStuff()
}
catch( Exception exa)
{
//Somthing else is wrong
WeepLikeBaby();
}
Если я использую сообщение Свойство
try
{
SomeFunc()
}
catch( Exception exa)
{
if(exa.Message == "ErrType 1")
{
DoStuff;
}
if(exa.Message == "ErrType 2")
{
Die();
}
}
Использование примера Base enum все еще может сохранить эту возможность. Однако вы даете себе одно место для определения своих сообщений, но это решается различными способами приложениями. Пример enum сделает создание локализованных сообщений довольно простым, так как даст вам возможность самостоятельно определять строки сообщений.
Еще одним преимуществом является то, что вы можете добавлять данные Cusotm, которые имеют смысл в вашем приложении. Например, у вас есть система информации о клиентах, и идентификатор клиента почти всегда будет иметь важное значение. Если вы используете только свойство сообщения, каждый обработчик должен знать, как анализировать эту информацию, если это необходимо.
public class MyCustomeEx : Exception
{
int CustID { get; set; }
}
public void Fail()
{
//Awww Customer error
throw new MyCustomeEx () {CustID = 123}
}