Chapter Four
C# Exceptions
1
Exceptions in C#
• Must inherit from System.Exception
• Standard error handling in C#
• Are thrown when:
• the code reaches a throw statement
• System exceptions occur (such as divide by zero)
• No checked exceptions or exception specifications
2
Throw statement
• Must throw an instance of an exception:
throw(new MyException(“Error”));
• May be used by itself only in a catch block:
catch
{
throw;
}
3
Creating an Exception Class
• Inherits from System.Exception or a derived class
public class Exception1 : System.Exception
{
public Exception1(string message) : base(message){}
}
public class SomeException : Exception1
{
public SomeException(string message) : base(message){}
}
4
ApplicationException
• Exceptions defined within an application should extend (inherit from)
System.ApplicationException
Catching an Exception
• A catch block is associated with a try block
• A try block may have more than one catch block
• catch blocks catch the exception type or any derived exception types
passing through
• catch blocks are searched in the order they appear in the code
• catch blocks for specific types must come before the more general
types
• An Empty catch clause will catch any type
• catch clauses don’t need a variable name
• catch(Exception) is ok 5
catch blocks
Wrong Right
void function1() void function1()
{ {
try try
{ {
// code // code
} }
catch(Exception ex) catch(Exception1 ex)
{ {
} }
catch(Exception1 ex) catch(Exception ex)
{ {
} }
}
// if no rethrow occurs
// execution resumes here
}
6
Exception Flow Control
•The exception is passed up until a suitable handler is found
void function1()
{
try
{
try
{
throw(new SomeOtherException(“Error Message”));
}
catch(Exception1 ex)
{
}
}
catch(Exception2 ex)
{
}
}
7
Exception Flow Control
•If no suitable handler (catch clause) was found, the exception is
passed to the calling method
void function2()
{
try
{
Function1();
}
catch(Exception3 ex3)
{
}
catch(Exception2 ex4)
{
}
catch(Exception ex)
{
}
}
8
Unhandled Exceptions
• If no error handler is found the application
terminates
• Control is passed back to Windows
finally block
• Must be associated with a try block
• a try block may have only one finally block
• finally block always gets executed
• The appropriate catch clause is executed first
9
finally Flow Control
void function1()
{
try
{
try
{
throw(new SomeException(“Error Message”));
}
catch(Exception1 ex)
{
}
finally
{
}
}
catch(Exception2 ex)
{
}
finally
{
}
}
10
• ArithmeticException
• ArrayTypeMismatchException
Library • DivideByZeroException
Exceptions • IndexOutOfRangeException
• InvalidCastException
• NullReferenceException
11
• Message
• string message associated with the exception
• InnerException
• If this exception was generated inside an
exception handler, this refers to the original
exception
System.Exception
Class • Source
• Refers to the source class
• StackTrace
• String representing the call stack, file and line
number
12
Breaking On Exceptions
•Debug | Exceptions (or Ctrl + Alt + E)
13