using System; public class Starter { public static void Main() { Bank account = new Bank(); account.NonSufficientFund += NonSufficientFundHandler; account.Deposit(500); account.Withdrawal(750); } public static void NonSufficientFundHandler(object o,BankEventArgs e) { Console.WriteLine("NonSufficientFund Transaction"); Console.WriteLine("Balance: {0}", e.Balance); Console.WriteLine("Transaction: {0}",e.Transaction); } } public delegate void OverDrawn(object o, BankEventArgs e); public class Bank { public event OverDrawn NonSufficientFund; public decimal Deposit(decimal amountDeposit) { propBalance += amountDeposit; return propBalance; } public decimal Withdrawal(decimal amountWithdrawn) { decimal newBalance = propBalance - amountWithdrawn; if (newBalance < 0) { if (NonSufficientFund != null) { BankEventArgs args = new BankEventArgs(Balance, amountWithdrawn); NonSufficientFund(this, args); } return propBalance; } return propBalance = newBalance; } private decimal propBalance = 0; public decimal Balance { get { return propBalance; } } } public class BankEventArgs : EventArgs { public BankEventArgs(decimal amountBalance,decimal amountTransaction) { propBalance = amountBalance; propTransaction = amountTransaction; } private decimal propBalance; public decimal Balance { get { return propBalance; } } private decimal propTransaction; public decimal Transaction { get { return propTransaction; } } }