事件Event,使用委托的时候,通常会出现两个角色,一个广播者,一个订阅者。
最简单的声明事件的方式就是在委托前面加上event关键字。
pulic delegate void PriceChangedHandler(double oldPrice,double newPrice);
public class Brodcaster()
{
pulic event PriceChangeHandler PriceChanged;
}
Brodcaster类型里面的代码拥有对PriceChanged的完全访问权,在这里就可以把它当做委托。而Brodcaster类型之外的代码只能对PriceChanged这个event执行+=或-=操作。
public
class
PriceChagnedEventArgs
:
System.EventArgs
{
public
readonly
decimal
OldPrice;
public
readonly
decimal
NewPrice;
public
PriceChangedEventArgs(decimal oldVal,decimal newVal)
{
OldPrice
= oldVal;
NewPrice
= newVal;
}
}
pulic delegate
void
EventHandler<TEventArgs>(object source,TEventArgs e)where
TEventArgs:EvebtAargs;
可触发事件的protected virtual方法 方法名必须和事件一直,前面再加上On,接收一个EventArgs参数
public class Stock
{
public event EventHandler<PriceChangedEventArgs>PriceChanged;
protected vivtual void OnPriceChanged(PriceChangedEventArgs e)
{
if(PriceChanged != null) PriceChanged(this,e);
}
}
if(PriceChanged
!=
null)
PriceChanged(this,e);
PriceChanged?.Invoke(this,e);
OnPriceChanged(EventArgs.Empty);
public
class
Demo
{
public
static
event
EventHandler<EventArgs>
StaticEvent;
public
virtual
event
EventHandler<EventArgs>
VirtualEvent;
}