In C# how do I define my own Exceptions?

Guidelines for creating your own exception (next to the fact that your class should inherit from exception)

  • make sure the class is serializable, by adding the [Serializable] attribute
  • provide the common constructors that are used by exceptions:

    MyException ();
    
    MyException (string message);
    
    MyException (string message, Exception innerException);
    

So, ideally, your custom Exception should look at least like this:

[Serializable]
public class MyException : Exception
{
    public MyException ()
    {}

    public MyException (string message) 
        : base(message)
    {}

    public MyException (string message, Exception innerException)
        : base (message, innerException)
    {}    
}

About the fact whether you should inherit from Exception or ApplicationException:
FxCop has a rule which says you should avoid inheriting from ApplicationException:

CA1058 : Microsoft.Design :
Change
the base type of ‘MyException’ so that
it no longer extends
‘ApplicationException’. This base
exception type does not provide any
additional value for framework
classes. Extend ‘System.Exception’ or
an existing unsealed exception type
instead. Do not create a new exception
base type unless there is specific
value in enabling the creation of a
catch handler for an entire class of
exceptions.

See the page on MSDN regarding this rule.

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)