// Invoke the Loan event
 public virtual void OnLoan(LoanEventArgs e)
 {
     if (Loan != null)
     {
         Loan(this, e);
     }
 }
 public override void LoanHandler(object sender, LoanEventArgs e)
 {
     if (e.Loan.Amount < 45000.0)
     {
         Console.WriteLine("{0} approved request# {1}",
                           this.GetType().Name, e.Loan.Number);
     }
     else if (Successor != null)
     {
         Successor.LoanHandler(this, e);
     }
 }
 public override void LoanHandler(object sender, LoanEventArgs e)
 {
     if (e.Loan.Amount < 100000.0)
     {
         Console.WriteLine("{0} approved request# {1}",
                           sender.GetType().Name, e.Loan.Number);
     }
     else if (Successor != null)
     {
         Successor.LoanHandler(this, e);
     }
     else
     {
         Console.WriteLine(
             "Request# {0} requires an executive meeting!",
             e.Loan.Number);
     }
 }
 // Loan event handler
 public abstract void LoanHandler(object sender, LoanEventArgs e);