using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 委托与事件处理_c_____
{
//时间只能在声明这个时间的类中引发。
//引发时必须适当地进行初始化的参数有两个:Sender(引发事件的对象) e(包含时间参数的对象)
class Account
{
protected decimal _balance;
public delegate void OverdraftEventHandler(object sender, OverdraftEventArgs e);//声明委托
public event OverdraftEventHandler OnOverdarftHanler;//将委托定义为事件(event关键字),声明一个对象OnOverdarftHanler
public Account(decimal init)
{
_balance = init;
}
public decimal Banlance
{
get
{
return _balance;
}
}
//public void Deposit(decimal aDeposit)
//{
// _balance += aDeposit;
//}
public bool Withdrawal(decimal aDebit)
{
OverdraftEventArgs args = new OverdraftEventArgs(_balance, aDebit);
OnOverdraft(args);
return false;
}
public void AddOnOverdraft(OverdraftEventHandler handler)
{
OnOverdarftHanler += handler;
}
protected void OnOverdraft(OverdraftEventArgs e)
{
if (OnOverdarftHanler != null)
OnOverdarftHanler(this,e);//类内部调用事件
}
}
public class OverdraftEventArgs : EventArgs//事件参数,继承,描述了透支本质
{
protected decimal _balance;
protected decimal _withdrawal;
public OverdraftEventArgs(decimal balance, decimal withdrawal)
{
_balance = balance;
_withdrawal = withdrawal;
}
}
}
//订阅事件
//Account account = new Account(100);
//Account.OverdraftEventHandler handler = new Account.OverdraftEventHandler(OnOverdraft);//创建事件实例,
//将符合要求的函数写入
//account.AddOnOverdraft(handler);
//static void OnOverdraft(object sender, OverdraftEventArgs e)//严格定义指定的参数
//{
// DO_SOMETHING
//}