/* Learning C# by Jesse Liberty Publisher: O'Reilly ISBN: 0596003765 */ using System; namespace ExceptionHandling { // custom exception class class MyCustomException : System.ApplicationException { public MyCustomException(string message): base(message) // pass the message up to the base class { } } public class TesterExceptionHandling { public void Run() { try { Console.WriteLine("Open file here"); double a = 0; double b = 5; Console.WriteLine ("{0} / {1} = {2}", a, b, DoDivide(a,b)); Console.WriteLine ( "This line may or may not print"); } // most derived exception type first catch (System.DivideByZeroException e) { Console.WriteLine( " DivideByZeroException! Msg: {0}", e.Message); Console.WriteLine( " HelpLink: {0} ", e.HelpLink); } // catch custom exception catch (MyCustomException e) { Console.WriteLine( " MyCustomException! Msg: {0}", e.Message); Console.WriteLine( " HelpLink: {0} ", e.HelpLink); } catch // catch any uncaught exceptions { Console.WriteLine( "Unknown exception caught"); } finally { Console.WriteLine ("Close file here."); } } // do the division if legal public double DoDivide(double a, double b) { if (b == 0) { DivideByZeroException e = new DivideByZeroException(); e.HelpLink= "http://www.libertyassociates.com"; throw e; } if (a == 0) { // create a custom exception instance MyCustomException e = new MyCustomException( "Can't have zero divisor"); e.HelpLink = "http://www.libertyassociates.com/NoZeroDivisor.htm"; throw e; } return a/b; } static void Main() { Console.WriteLine("Enter Main..."); TesterExceptionHandling t = new TesterExceptionHandling(); t.Run(); Console.WriteLine("Exit Main..."); } } }