using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
// 事件发布者/订阅者 EventArgs
namespace Donis.CSharpBook
{
public class Starter
{
static void Main(string[] args)
{
Bank account = new Bank();
account.NSF += NSFHandler; // 订阅者
account.Deposit(500);
account.withdrawal(750);
}
public static void NSFHandler(object o, BankEventArgs e){ // 事件处理函数
Console.WriteLine("NSF 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 NSF; // non-sufficient funds 委托类型的事件
// 存入
public decimal Deposit(decimal amountDeposit){
propBalance += amountDeposit;
return propBalance;
}
// 取钱
public decimal withdrawal(decimal amountWithdrawn){
decimal newBalance = propBalance - amountWithdrawn;
if (newBalance < 0)
{
if (NSF != null)
{
BankEventArgs args = new BankEventArgs(Balance, amountWithdrawn); // 构造事件参数
NSF(this, args); // 引发事件
}
}
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;
}
}
}
}
运行结果:
NSF Transaction
Balance: 500
Transaction:750