5

hi can any one tell me how to write user defined exceptions in C#?As we have in Java can we write in C#?

jjnguy
  • 136,852
  • 53
  • 295
  • 323
Hemant Kumar
  • 4,593
  • 9
  • 56
  • 95

2 Answers2

16

You want to inherit from System.Exception and preferrably provide (at minimum) the same public constructors and pass the parameters on to the base constructors. Add the relevant properties and/or methods you deem appropriate for your particular need.

public class MyException : System.Exception
{
     public MyException() : base() { }
     public MyException(string message) : base(message) { }
     public MyException(string message, Exception innerException) : base(message, innerException) { }
} 
this. __curious_geek
  • 42,787
  • 22
  • 113
  • 137
Anthony Pegram
  • 123,721
  • 27
  • 225
  • 246
  • According to the .NET Framework Design Guidelines, you are supposed to inherit directly from Exception unless you have a really good reason to pick something else. – Jonathan Allen Oct 04 '10 at 05:16
  • @Jonathan: All systems back to normal. Deleted my stupid answer and removed my useless comment. Upvoted the answer in the name of SO spirit. Thanks for correction. – this. __curious_geek Oct 04 '10 at 05:21
11

It is practically the same as it is in Java - you extend the Exception class.

In the most basic form.

public class CustomException : System.Exception
{
  public CustomException()
  {
  }

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

  public CustomException(string message, System.Exception innerException)
    : base(message, innerException)
  {
  }
}

To this, then add the data that you want to capture using either fields or properties.

Out of interest, before answering this question, I checked the Microsoft Design Guildlines on Custom Exceptions. Designing Custom Exceptions (MSDN)

  1. Avoid deep namespace hierarchies.
  2. If possible, derive from one the provided common base exceptions, i.e., ArgumentException. HOWEVER Do not derive from ApplicationException. It is not harmful, it is no point in doing so. MSDN Blog Post on ApplicationException.
  3. Use the "Exception" suffix.
  4. Make exceptions serializable by implementing the ISerializable interface. Apparently an exception must be serializable to work correctly across application domain and remoting boundaries.
  5. Store security-sensitive information in a private exception state, add a SecurityPermission attribute to ensure that only trusted code can get the information.

I highly recommend reading the Design Guidelines on MSDN.

Dennis
  • 20,275
  • 4
  • 64
  • 80