When an error occurs , the currently executing application or the system (CLR) reports it by throwing an EXCEPTION which happens to be human readable text providing information about the error.
A search of the call stack immediately begins until the exception is handled.If the top of the call stack is reached without finding a catch block that handles the exception , then the default exception handler will handle it and application execution terminates
Basically, an exception object is an instance of some class which is thrown to when something exceptional goes wrong, e.g. a file I/O operation problem when a file is locked. The use of object types that inherit from System.Exception is actually not a direct requirement of the CLR. Essentially, exceptions are thrown when the current piece of code can't deal with the problematic situation and wants the caller to handle it further on. In order to handle such exceptions, a block of code must be protected which results in a so-called "protected block".